# src/cli/menu.py
"""
Módulo de interfaz de usuario - MVP v1.0

Implementa la interfaz de línea de comandos para control del sistema, 
incluyendo procesamiento de comandos y visualización de estado.
"""

import logging
from datetime import datetime

logger = logging.getLogger(__name__)

class CommandMenu:
    def __init__(self, processor):
        """
        Inicializa el menú de comandos.
        
        Args:
            processor: Instancia del procesador principal
        """
        self.processor = processor

    def start(self):
        """
        Inicia el bucle principal de procesamiento de comandos.
        """
        while self.processor.running:
            try:
                self._show_status()
                self._process_command()
            except EOFError:
                if self.processor.debug:
                    logger.debug("EOFError recibido")
                break
            except Exception as e:
                logger.error(f"Error en menú de comandos: {e}")
                if self.processor.debug:
                    logger.debug("Error detallado:", exc_info=True)

    def _show_status(self):
        """
        Muestra el estado actual del sistema.
        """
        try:
            # Recopilar estados activos
            estados = []
            if self.processor.verbose:
                estados.append("VERBOSE")
            else:
                estados.append("NORMAL")
            if self.processor.debug:
                estados.append("DEBUG")

            # Mostrar información
            print("\n=== Sistema de Monitoreo ===")
            print(f"Estado: {' | '.join(estados)}")
            print(f"Entradas activas: {len(self.processor.entradas)}")

            # Mostrar menú
            print("\nComandos disponibles:")
            print("  X - Salir")
            print("  V - Toggle modo Verbose")
            print("  D - Toggle modo Debug")
            print("  S - Mostrar estado")
            print("  M - Mostrar mediciones")
        except Exception as e:
            logger.error(f"Error mostrando estado: {e}")
            if self.processor.debug:
                logger.debug("Error detallado:", exc_info=True)

    def _process_command(self):
        """
        Procesa un comando ingresado por el usuario.
        """
        try:
            cmd = input("\nComando: ").strip().upper()

            if self.processor.debug:
                logger.debug(f"Comando recibido: {cmd}")

            if cmd == "X":
                if self.processor.debug:
                    logger.debug("Iniciando secuencia de salida")
                self.processor.stop()
            elif cmd == "V":
                if self.processor.debug:
                    logger.debug("Cambiando modo verbose")
                self.processor.toggle_verbose()
            elif cmd == "D":
                logger.debug("Cambiando modo debug")
                self.processor.toggle_debug()
            elif cmd == "S":
                if self.processor.debug:
                    logger.debug("Mostrando estado del sistema")
                self.processor.show_status()
            elif cmd == "M":
                if self.processor.debug:
                    logger.debug("Mostrando mediciones actuales")
                self.processor.show_measurement_status()
            else:
                print("Comando no reconocido. Use X, V, D, S o M")
                if self.processor.debug:
                    logger.debug(f"Comando no reconocido: {cmd}")
        except Exception as e:
            logger.error(f"Error procesando comando: {e}")
            if self.processor.debug:
                logger.debug("Error detallado:", exc_info=True)

def create_menu(processor):
    """
    Crea y retorna una nueva instancia del menú de comandos.
    
    Args:
        processor: Instancia del procesador principal
        
    Returns:
        CommandMenu: Nueva instancia del menú
    """
    return CommandMenu(processor)