"""
Queries del Sistema - MVP v1.0

Queries optimizadas para:
- Análisis en tiempo real
- Procesamiento estadístico
- Carga de configuraciones
"""

# Queries para tiempo real (prioridad alta)
REALTIME_MEASUREMENTS = """
    SELECT 
        bb.id,
        bb.dmac,
        bb.temp,
        bb.fecha,
        m.idSistema,
        e.idEntrada 
    FROM bandeja_blue bb
    JOIN modbus m ON bb.dmac = m.dmac
    JOIN entradas e ON m.idModbus = e.idModbus
    WHERE bb.analizado_el IS NULL
    ORDER BY bb.fecha
    LIMIT %s
"""



MARK_ANALYZED = """
    UPDATE bandeja_blue 
    SET analizado_el = %s 
    WHERE id IN ({})
"""

INSERT_ALARM = """
    INSERT INTO alarmas (
        idSistema, idEntrada, valor, 
        idEstado, fecha, activa
    ) VALUES 
        (%s, %s, %s, %s, %s, %s)
"""

# Queries para estadísticas (prioridad normal)
STATS_MEASUREMENTS = """
    SELECT 
        bb.id,
        bb.dmac,
        bb.temp,
        bb.fecha,
        m.idSistema,
        e.idEntrada 
    FROM bandeja_blue bb
    JOIN modbus m ON bb.dmac = m.dmac
    JOIN entradas e ON m.idModbus = e.idModbus
    WHERE bb.procesado_el IS NULL
        AND bb.fecha < %s  -- Fin del período
    ORDER BY bb.fecha
    LIMIT %s
"""

MARK_PROCESSED = """
    UPDATE bandeja_blue 
    SET procesado_el = %s 
    WHERE id IN ({})
"""

INSERT_STATS = """
    INSERT INTO registros (
        idSistema, idEntrada, fecha,
        medio, maximo, minimo, desvio
    ) VALUES (
        %s, %s, %s, %s, %s, %s, %s
    ) ON DUPLICATE KEY UPDATE
        medio = VALUES(medio),
        maximo = VALUES(maximo),
        minimo = VALUES(minimo),
        desvio = VALUES(desvio)
"""

# Queries de configuración
ACTIVE_SENSORS = """
    SELECT DISTINCT 
        m.dmac,
        m.idSistema,
        e.idEntrada,
        e.nombre,
        e.descripcion
    FROM modbus m
    JOIN entradas e ON m.idModbus = e.idModbus
    WHERE m.estado = 1
"""

SENSOR_CONFIG = """
    SELECT 
        c.idSistema,
        c.idEntrada,
        c.vMin1,
        c.vMax1,
        c.tMax1,
        c.generaAlarma,
        c.factor,
        c.calibracionM,
        c.calibracionB
    FROM configuraciones c
    WHERE c.generaAlarma = 1
"""

# Queries de mantenimiento
CLEANUP_OLD_DATA = """
    DELETE FROM bandeja_blue
    WHERE fecha < DATE_SUB(NOW(), INTERVAL %s DAY)
        AND procesado_el IS NOT NULL
        AND analizado_el IS NOT NULL
"""

# Queries para métricas
UNPROCESSED_COUNT = """
    SELECT COUNT(*) as count
    FROM bandeja_blue
    WHERE procesado_el IS NULL
"""

UNANALYZED_COUNT = """
    SELECT COUNT(*) as count
    FROM bandeja_blue
    WHERE analizado_el IS NULL
"""

ACTIVE_ALARMS = """
    SELECT 
        a.idSistema,
        a.idEntrada,
        a.valor,
        a.idEstado,
        a.fecha,
        e.nombre,
        e.descripcion
    FROM alarmas a
    JOIN entradas e ON a.idEntrada = e.idEntrada
    WHERE a.activa = 1
    ORDER BY a.fecha DESC
"""

# Función para generar placeholders para IN clauses
def get_placeholders(count: int) -> str:
    """
    Genera string de placeholders para consultas IN
    
    Args:
        count: Cantidad de placeholders
        
    Returns:
        str: String con placeholders (e.g., "%s, %s, %s")
    """
    return ', '.join(['%s'] * count)