"""
AutoBackups System Tray Launcher
Lanza la aplicación AutoBackups con icono en el system tray
"""

import sys
from pathlib import Path
import threading
import time
import logging

# Agregar el directorio src al path para imports
current_dir = Path(__file__).parent
src_dir = current_dir / "src"
sys.path.insert(0, str(src_dir))

# Imports de la aplicación
from src.app import AutoBackupsFlaskApp, app


def run_flask_app(autobackups_app, host, port, debug=False):
    """Ejecuta la aplicación Flask en un hilo separado"""
    try:
        app.run(host=host, port=port, debug=debug, use_reloader=False)
    except Exception as e:
        logging.error(f"Error ejecutando Flask app: {e}")


def main():
    """Función principal para el launcher del system tray"""
    try:
        print("AutoBackups - System Tray Mode")
        print("=" * 30)

        # Crear y configurar aplicación Flask
        autobackups_app = AutoBackupsFlaskApp()

        # Verificar requerimientos del sistema
        if not autobackups_app.check_system_requirements():
            print("Error en la verificación de requerimientos del sistema.")
            sys.exit(1)

        # Ejecutar descubrimiento inicial de proyectos
        projects_found = autobackups_app.discover_projects()
        msg = f"Descubrimiento inicial: {projects_found} proyectos encontrados"
        print(msg)

        # Configurar Flask
        host = autobackups_app.config.web_interface.get("host", "127.0.0.1")
        port = autobackups_app.config.web_interface.get("port", 5000)
        debug = autobackups_app.config.web_interface.get("debug", False)

        print(f"Servidor web iniciando en http://{host}:{port}")

        # Iniciar system tray
        if autobackups_app.start_system_tray():
            print("✓ System tray iniciado correctamente")
        else:
            print("⚠ System tray no disponible, continuando...")

        # Ejecutar Flask en un hilo separado
        flask_thread = threading.Thread(
            target=run_flask_app, args=(autobackups_app, host, port, debug), daemon=True
        )
        flask_thread.start()

        print("✓ Aplicación iniciada")
        print("• Accede desde el icono del system tray")
        print("• Usa Ctrl+C para salir desde la consola")
        print("• O usa 'Exit' desde el menú del system tray")

        # Mantener el programa corriendo
        try:
            while True:
                time.sleep(1)
        except KeyboardInterrupt:
            print("\nCerrando aplicación...")

    except KeyboardInterrupt:
        print("\nAplicación interrumpida por el usuario")
    except Exception as e:
        print(f"Error inesperado: {e}")
        sys.exit(1)
    finally:
        # Limpieza
        if "autobackups_app" in locals():
            if autobackups_app.scheduler:
                autobackups_app.scheduler.shutdown()
            if autobackups_app.system_tray:
                autobackups_app.system_tray.stop_tray()


if __name__ == "__main__":
    main()
