# Funciones para calendarización específica de IIEE
from conexion.conexionBD import connectionBD
import datetime
import calendar

def obtener_calendarizacion_iiee(codmodular, anio=None):
    """Obtiene la calendarización específica para una IIEE"""
    try:
        with connectionBD() as conexion_MySQLdb:
            with conexion_MySQLdb.cursor(dictionary=True) as cursor:
                if anio is None:
                    anio = datetime.datetime.now().year

querySQL = ("""
                    SELECT
                        dia,
                        mes,
                        tipo_dia
                    FROM iiee_calendarizacion
                    WHERE codmodular = %s AND anio = %s AND mes BETWEEN 1 AND 12
                    ORDER BY mes, dia
                    """)


                cursor.execute(querySQL, (codmodular, anio))
                calendarizacion = cursor.fetchall()
        return calendarizacion
    except Exception as e:
        print(f"Error en obtener_calendarizacion_iiee: {e}")
        return []

def guardar_calendarizacion_iiee(codmodular, anio, mes, dia, tipo_dia):
    """Guarda o actualiza la calendarización para una fecha específica de una IIEE"""
    try:
        with connectionBD() as conexion_MySQLdb:
            with conexion_MySQLdb.cursor() as cursor:
                querySQL = ("""
                    INSERT INTO iiee_calendarizacion (codmodular, anio, mes, dia, tipo_dia)
                    VALUES (%s, %s, %s, %s, %s)
                    ON DUPLICATE KEY UPDATE
                    tipo_dia = VALUES(tipo_dia),
                    fecha_modificacion = CURRENT_TIMESTAMP
                    """)
                cursor.execute(querySQL, (codmodular, anio, mes, dia, tipo_dia))
                conexion_MySQLdb.commit()
        return True
    except Exception as e:
        print(f"Error en guardar_calendarizacion_iiee: {e}")
        return False

def generar_calendarizacion_predeterminada(codmodular, anio):
    """Genera una calendarización predeterminada para una IIEE en un año específico"""
    try:
        with connectionBD() as conexion_MySQLdb:
            with conexion_MySQLdb.cursor() as cursor:
                # Limpiar calendarización existente para el año
                cursor.execute("DELETE FROM iiee_calendarizacion WHERE codmodular = %s AND anio = %s", (codmodular, anio))

# Generar calendarización para marzo-diciembre (~306 días)
                for mes in range(1, 13):
                    # Obtener número de días en el mes (sin febrero ya que mes >= 3)
                    dias_mes = calendar.monthrange(anio, mes)[1]

                    for dia in range(1, dias_mes + 1):
                        # Determinar el día de la semana
                        fecha = datetime.date(anio, mes, dia)
                        dia_semana = fecha.weekday()  # 0=lunes, 6=domingo

                        # Asignar tipo de día
                        if dia_semana >= 5:  # sábado o domingo
                            tipo_dia = 'fin_semana'
                        else:
                            tipo_dia = 'lectivo'

                        # Insertar en la base de datos
                        querySQL = ("""
                            INSERT INTO iiee_calendarizacion (codmodular, anio, mes, dia, tipo_dia)
                            VALUES (%s, %s, %s, %s, %s)
                            """)
                        cursor.execute(querySQL, (codmodular, anio, mes, dia, tipo_dia))

                # Marcar feriados y vacaciones estándar para Perú 2026 (para 219 días lectivos)
                feriados = [
                    (5,1),   # Día del Trabajo
                    (6,29),  # San Pedro y San Pablo
                    (7,28),  # Independencia
                    (7,29),  # Transferencia de Fiestas Patrias
                    (8,30),  # Santa Rosa de Lima
                    (10,8),  # Combate de Angamos
                    (11,1),  # Todos los Santos
                    (12,8),  # Inmaculada Concepción
                ]
                # Vacaciones de invierno
                for dia in range(15,32): feriados.append((7,dia))
                for dia in range(1,12): feriados.append((8,dia))
                # Dec navidad
                for dia in range(23,32): feriados.append((12,dia))

                for mes_f, dia_f in feriados:
                    cursor.execute("""
                        UPDATE iiee_calendarizacion 
                        SET tipo_dia = 'feriado' 
                        WHERE codmodular = %s AND anio = %s AND mes = %s AND dia = %s AND tipo_dia = 'lectivo'
                        """, (codmodular, anio, mes_f, dia_f))

                conexion_MySQLdb.commit()

        return True
    except Exception as e:
        print(f"Error en generar_calendarizacion_predeterminada: {e}")
        return False

def obtener_informacion_iiee(codmodular):
    """Obtiene información básica de la IIEE"""
    try:
        with connectionBD() as conexion_MySQLdb:
            with conexion_MySQLdb.cursor(dictionary=True) as cursor:
                querySQL = ("""
                    SELECT
                        e.codmodular,
                        e.horario,
                        e.ri,
                        e.pat,
                        e.pei,
                        e.calendarizacion,
                        e.mensaje_calendarizacion,
                        i.nombreie,
                        i.nivel,
                        i.direccion
                    FROM tbl_docie AS e
                    LEFT JOIN iiee AS i ON e.codmodular = i.codmodular
                    WHERE e.codmodular = %s
                    """)
                cursor.execute(querySQL, (codmodular,))
                info_iiee = cursor.fetchone()
        return info_iiee
    except Exception as e:
        print(f"Error en obtener_informacion_iiee: {e}")
        return None

def actualizar_estado_calendarizacion(codmodular, estado, comentario=None):
    """Actualiza el estado de calendarización en tbl_docie"""
    try:
        with connectionBD() as conexion_MySQLdb:
            with conexion_MySQLdb.cursor() as cursor:
                if estado == 3 and comentario:
                    querySQL = ("""
                        UPDATE tbl_docie
                        SET calendarizacion = %s, mensaje_calendarizacion = %s
                        WHERE codmodular = %s
                        """)
                    cursor.execute(querySQL, (estado, comentario, codmodular))
                else:
                    querySQL = ("""
                        UPDATE tbl_docie
                        SET calendarizacion = %s
                        WHERE codmodular = %s
                        """)
                    cursor.execute(querySQL, (estado, codmodular))
                conexion_MySQLdb.commit()
        return True
    except Exception as e:
        print(f"Error en actualizar_estado_calendarizacion: {e}")
        return False
