import os
import pyodbc
from dotenv import load_dotenv

load_dotenv()


def _get_conn():
    server = os.getenv('DB_SERVER')
    db     = os.getenv('DB_DATABASE')
    user   = os.getenv('DB_USER')
    pwd    = os.getenv('DB_PASSWORD')
    driver = os.getenv('DB_DRIVER', '{ODBC Driver 18 for SQL Server}')
    return pyodbc.connect(
        f'DRIVER={driver};SERVER={server};DATABASE={db};UID={user};PWD={pwd};TrustServerCertificate=yes;'
    )


def guardar_fallo_descarga(fuente, no_disponible, error_descarga):
    try:
        conn = _get_conn()
        cursor = conn.cursor()
        cursor.execute(
            'EXEC sp_resumen_estado_fallo_descarga ?, ?, ?',
            (fuente, int(no_disponible), int(error_descarga)),
        )
        conn.commit()
        cursor.close()
        conn.close()
        total = int(no_disponible) + int(error_descarga)
        print(f'✓ fallo_descarga guardado en BD ({fuente}: {total} total, {no_disponible} no_disponible, {error_descarga} error_descarga)')
    except Exception as e:
        print(f'⚠ Error al guardar fallo_descarga en BD: {e}')


def guardar_sin_edictos(fuente, sin_edictos):
    try:
        conn = _get_conn()
        cursor = conn.cursor()
        cursor.execute(
            'EXEC sp_resumen_estado_sin_edictos ?, ?',
            (fuente, int(sin_edictos)),
        )
        conn.commit()
        cursor.close()
        conn.close()
    except Exception as e:
        print(f'⚠ Error al guardar sin_edictos en BD: {e}')


def reset_sin_edictos(fuente):
    try:
        conn = _get_conn()
        cursor = conn.cursor()
        cursor.execute('EXEC sp_reset_sin_edictos ?', (fuente,))
        conn.commit()
        cursor.close()
        conn.close()
        print(f'✓ sin_edictos reseteado en BD ({fuente})')
    except Exception as e:
        print(f'⚠ Error al resetear sin_edictos en BD: {e}')


def guardar_dia_faltante(fuente: str, fecha: str, motivo: str) -> None:
    """Registra un día sin datos con su motivo discriminado.

    motivo: 'no_disponible' | 'error_descarga' | 'sin_edictos'
    """
    try:
        conn = _get_conn()
        cursor = conn.cursor()
        cursor.execute('EXEC EDT_dia_faltante ?, ?, ?', (fuente, fecha, motivo))
        conn.commit()
        cursor.close()
        conn.close()
    except Exception as e:
        print(f'⚠ Error al guardar dia_faltante en BD ({fuente} {fecha} {motivo}): {e}')
