import os
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
from flask import current_app
from appliBDC.models import Document, db

class DocumentHandler(FileSystemEventHandler):
    def __init__(self, upload_folder):
        self.upload_folder = upload_folder

    def on_created(self, event):
        if not event.is_directory:
            self.process_file(event.src_path)

    def process_file(self, filepath):
        filename = os.path.basename(filepath)
        file_type = os.path.splitext(filename)[1][1:].lower() if os.path.splitext(filename)[1] else ''

        # Vérifier si le fichier existe déjà en base
        existing_doc = Document.query.filter_by(filename=filename).first()
        if existing_doc:
            existing_doc.file_path = filepath
            db.session.commit()
            current_app.logger.info(f"Mise à jour du chemin pour {filename}")
        else:
            # Créer un nouveau document en base
            doc = Document(
                title=os.path.splitext(filename)[0],
                filename=filename,
                file_type=file_type,
                file_path=filepath,
                uploaded_by="system_sync"
            )
            db.session.add(doc)
            db.session.commit()
            current_app.logger.info(f"Nouveau document ajouté : {filename}")

def start_watcher(upload_folder):
    event_handler = DocumentHandler(upload_folder)
    observer = Observer()
    observer.schedule(event_handler, upload_folder, recursive=False)
    observer.start()
    current_app.logger.info(f"Surveillance démarrée pour {upload_folder}")
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()

# À appeler au démarrage de l'application (dans un thread séparé)
