# src/processors/base.py
"""
Procesador base del sistema - MVP v1.0

Implementa la funcionalidad core para el procesamiento de datos,
estableciendo la base para los procesadores específicos.
"""

import logging
import threading
from datetime import datetime
from ..db.database import connect
from ..config.settings import DB_CONFIG

logger = logging.getLogger(__name__)

class BaseProcessor:
    def __init__(self, db_name):
        self.db_name = db_name
        self.conn = None
        self.verbose = False
        self.debug = False 
        self.running = True
        self.lock = threading.Lock()
        self.connect_db()
        
    def connect_db(self):
        """Establece conexión con la base de datos"""
        try:
            self.conn = connect(self.db_name)
            if self.conn:
                logger.info(f"Conectado a base de datos: {self.db_name}")
                return True
        except Exception as e:
            logger.error(f"Error de conexión: {e}")
        return False

    def check_connection(self):
        """Verifica y reestablece la conexión si es necesario"""
        if not self.conn or not self.conn.is_connected():
            return self.connect_db()
        return True

    def toggle_verbose(self):
        """Cambia el modo verbose"""
        self.verbose = not self.verbose
        level = logging.DEBUG if self.verbose else logging.INFO
        logging.getLogger().setLevel(level)
        logger.info(f"Modo verbose: {'activado' if self.verbose else 'desactivado'}")

    def stop(self):
        """
        Detiene el procesador y limpia recursos.
        """
        logger.info("Deteniendo el procesador...")
        self.running = False
        
        if self.conn:
            try:
                if self.conn.is_connected():
                    # Asegurarnos de que no hay resultados pendientes
                    cursor = self.conn.cursor(buffered=True)
                    cursor.close()
                    self.conn.commit()  # Commit cualquier transacción pendiente
                    self.conn.close()
                    logger.info("Conexión a base de datos cerrada")
            except Exception as e:
                logger.error(f"Error cerrando conexión: {e}")
                
    def toggle_debug(self):
        """Cambia el modo debug"""
        self.debug = not self.debug
        logger.info(f"Modo debug: {'activado' if self.debug else 'desactivado'}")
