# src/main.py
"""
Módulo principal del sistema - MVP v1.0

Punto de entrada del sistema que coordina:
- Inicialización de componentes
- Procesamiento histórico inicial
- Monitoreo continuo
- Interfaz de comandos
"""

import argparse
import logging
import schedule
import time
import threading
import coloredlogs
from datetime import datetime
from .config.settings import LOG_LEVEL, PROCESS_INTERVAL
from .processors.historical import HistoricalProcessor
from .processors.realtime import RealtimeProcessor
from .cli.commands import CommandProcessor
from .cli.menu import create_menu

def setup_logging():
    """Configura el sistema de logging"""
    coloredlogs.install(
        level=LOG_LEVEL,
        fmt='%(asctime)s [%(levelname)s] %(message)s'
    )
    return logging.getLogger(__name__)

def main():
    logger = setup_logging()
    
    
    parser = argparse.ArgumentParser(description='Sistema de Monitoreo de Sensores IoT')
    parser.add_argument('db_name', help='Nombre de la base de datos')
    parser.add_argument('-v', '--verbose', action='store_true', help='Modo verbose')
    args = parser.parse_args()
    
    # Iniciar interfaz de comandos
    #menu = create_menu(processor)
    #menu.start()


    try:
        # Inicializar procesadores
        historical_proc = HistoricalProcessor(args.db_name)
        realtime_proc = RealtimeProcessor(args.db_name)
        command_proc = CommandProcessor(realtime_proc)

        if args.verbose:
            historical_proc.toggle_verbose()
            realtime_proc.toggle_verbose()

        # Procesar datos históricos
        logger.info("Iniciando procesamiento de datos históricos...")
        if historical_proc.process_historical_data():
            logger.info("Procesamiento histórico completado")
        else:
            logger.error("Error en procesamiento histórico")

        # Configurar procesamiento continuo
        schedule.every(1).minutes.do(realtime_proc.process_new_data)
        
        # Iniciar interfaz de comandos
        command_thread = threading.Thread(target=command_proc.start)
        command_thread.daemon = True
        command_thread.start()

        logger.info("Sistema iniciado en modo monitoreo continuo")
        
        # Loop principal
        while realtime_proc.running:
            schedule.run_pending()
            time.sleep(1)

    except KeyboardInterrupt:
        logger.info("Interrupción de usuario recibida")
    except Exception as e:
        logger.error(f"Error en sistema: {e}", exc_info=True)
    finally:
        if 'historical_proc' in locals():
            historical_proc.stop()
        if 'realtime_proc' in locals():
            realtime_proc.stop()
        logger.info("Sistema finalizado")

if __name__ == "__main__":
    main()