<?php
// Archivo: dashboard.php
session_start();
include 'db.php';

if (isset($_GET['logout'])) { session_destroy(); header("Location: index.php"); exit; }
if (!isset($_SESSION['user_id'])) { header("Location: index.php"); exit; }

if (!isset($_GET['jornada']) || !isset($_GET['rol'])) { 
    header("Location: menu.php"); 
    exit; 
}

$es_admin = (isset($_SESSION['es_admin']) && $_SESSION['es_admin'] == 1);
$mi_id = $_SESSION['user_id'];

$jornada = pg_escape_string($conn, $_GET['jornada']);
$rol_seleccionado = pg_escape_string($conn, $_GET['rol']);

$modo_pruebas = true; 
$mes_objetivo = date('Y-m', strtotime('first day of next month'));
$nombre_mes = strtoupper(date('F', strtotime($mes_objetivo . '-01')));
$anio_objetivo = date('Y', strtotime($mes_objetivo . '-01'));

$meses_es = ['JANUARY'=>'ENERO', 'FEBRUARY'=>'FEBRERO', 'MARCH'=>'MARZO', 'APRIL'=>'ABRIL', 'MAY'=>'MAYO', 'JUNE'=>'JUNIO', 'JULY'=>'JULIO', 'AUGUST'=>'AGOSTO', 'SEPTEMBER'=>'SEPTIEMBRE', 'OCTOBER'=>'OCTUBRE', 'NOVEMBER'=>'NOVIEMBRE', 'DECEMBER'=>'DICIEMBRE'];
$nombre_mes_es = isset($meses_es[$nombre_mes]) ? $meses_es[$nombre_mes] : $nombre_mes;

$dia_actual = date('d');
$dias_del_mes_actual = date('t');
$registro_abierto = (($dias_del_mes_actual - $dia_actual) <= 7 || $modo_pruebas || $es_admin);

$primer_dia = $mes_objetivo . '-01';
$ultimo_dia = date('Y-m-t', strtotime($primer_dia));

// Consultar SOLO los turnos del rol y jornada específicos
$query_turnos = "SELECT t.id_turno, t.fecha, t.id_colaborador, c.nombre 
          FROM turnos t 
          JOIN colaboradores c ON t.id_colaborador = c.id_colaborador 
          WHERE t.fecha >= '$primer_dia' AND t.fecha <= '$ultimo_dia' 
          AND t.jornada = '$jornada' AND t.rol = '$rol_seleccionado'
          ORDER BY t.id_turno ASC";
$result_turnos = pg_query($conn, $query_turnos);

$grilla = [];
if ($result_turnos) {
    while($fila = pg_fetch_assoc($result_turnos)) {
        $grilla[$fila['fecha']][] = [
            'id_turno' => $fila['id_turno'],
            'id_col' => $fila['id_colaborador'],
            'nombre' => htmlspecialchars($fila['nombre'], ENT_QUOTES, 'UTF-8')
        ];
    }
}

$total_dias = date('t', strtotime($primer_dia));
$dia_semana_inicio = date('N', strtotime($primer_dia));

// Configuración de visualización según el rol seleccionado. 999 = Sin límite.
$config_roles = [
    'Pasillos' => ['color' => '#0d6efd', 'icon' => 'fa-walking', 'cupo' => 3, 'desc' => 'Control de corredores'],
    'Baños' => ['color' => '#0dcaf0', 'icon' => 'fa-restroom', 'cupo' => 1, 'desc' => 'Zonas de aseo'],
    'Vigilancia' => ['color' => '#ffc107', 'icon' => 'fa-shield-alt', 'cupo' => 999, 'desc' => 'Control de puertas']
];
$conf_actual = $config_roles[$rol_seleccionado] ?? ['color' => '#6c757d', 'icon' => 'fa-check', 'cupo' => 1, 'desc' => 'Módulo'];
$texto_color = ($rol_seleccionado == 'Vigilancia') ? '#000' : '#fff'; 
$ilimitado = ($conf_actual['cupo'] >= 999);

// Colaboradores para el desplegable de admin (filtrados por permisos rol_1 y rol_2)
$colaboradores_permitidos = [];
if ($es_admin) {
    $query_admin = "SELECT id_colaborador, nombre, rol_1, rol_2 FROM colaboradores ORDER BY nombre ASC";
    $res_all = @pg_query($conn, $query_admin);
    
    if ($res_all) {
        while($c = pg_fetch_assoc($res_all)) {
            $r1 = strtoupper(trim($c['rol_1'] ?? ''));
            $r2 = strtoupper(trim($c['rol_2'] ?? ''));
            $rol_sel_upper = strtoupper(trim($rol_seleccionado));

            // Filtro ESTRICTO: Solo si tiene el rol seleccionado en rol_1 o rol_2
            if ($r1 === $rol_sel_upper || $r2 === $rol_sel_upper) {
                $colaboradores_permitidos[] = $c;
            }
        }
    }
}
?>
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Módulo <?php echo htmlspecialchars($rol_seleccionado); ?> - IDMJI</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
    <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" rel="stylesheet">
    <style>
        :root { --idmji-blue: #002D62; --idmji-gold: #D4AF37; --color-modulo: <?php echo $conf_actual['color']; ?>; }
        body { background-color: #f8f9fa; font-family: "Segoe UI", Arial, sans-serif; }
        .navbar-idmji { background-color: var(--idmji-blue); border-bottom: 3px solid var(--color-modulo); }
        .card-main { border: none; border-radius: 12px; box-shadow: 0 4px 15px rgba(0,0,0,0.05); }
        
        .badge-modulo { background-color: var(--color-modulo); color: <?php echo $texto_color; ?>; }
        .badge-missing { background-color: #dc3545; color: white; font-size: 0.7rem; padding: 3px 6px; border-radius: 10px; }
        
        .cal-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 1px; background-color: #dee2e6; border: 1px solid #dee2e6; border-radius: 8px; overflow: hidden;}
        .cal-header { background-color: #f1f3f5; text-align: center; font-weight: bold; padding: 12px 0; font-size: 0.75rem; color: #495057; }
        .cal-cell { background-color: white; min-height: 110px; padding: 6px; display: flex; flex-direction: column; transition: background 0.2s; cursor: pointer; }
        .cal-cell:hover { background-color: #f8f9fa; }
        .cal-cell.incomplete { background-color: #fff8f8; }
        .cal-day-num { font-weight: bold; color: #adb5bd; font-size: 0.85rem; margin-bottom: 6px; display: flex; justify-content: space-between; align-items: center; border-bottom: 1px solid #f1f3f5; padding-bottom: 3px;}
        
        .role-tag { font-size: 0.7rem; padding: 4px 6px; border-radius: 6px; margin-bottom: 3px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; display: flex; align-items: center;}
        .role-tag.mi-turno { border: 2px solid var(--idmji-gold); box-shadow: 0 2px 4px rgba(0,0,0,0.1); }
        
        .day-check-container { height: 350px; overflow-y: auto; border: 1px solid #e9ecef; border-radius: 8px; padding: 10px; background: #fff; }
        
        @media (max-width: 768px) {
            .navbar-brand { font-size: 1rem; }
        }
    </style>
</head>
<body>

<nav class="navbar navbar-idmji shadow-sm mb-4 py-2 sticky-top">
    <div class="container-fluid px-2 px-md-4 d-flex justify-content-between align-items-center">
        <div class="d-flex align-items-center">
            <a href="modulos.php?jornada=<?php echo urlencode($jornada); ?>" class="btn btn-outline-light btn-sm rounded-circle me-2"><i class="fas fa-arrow-left"></i></a>
            <span class="navbar-brand mb-0 text-white fw-bold">
                <i class="fas <?php echo $conf_actual['icon']; ?> me-2" style="color: var(--color-modulo);"></i>
                <?php echo htmlspecialchars($rol_seleccionado); ?> <span class="badge bg-light text-dark ms-1 opacity-75"><?php echo htmlspecialchars($jornada); ?></span>
            </span>
        </div>
        <div class="d-flex align-items-center">
            <span class="text-white me-3 small d-none d-md-inline"><i class="fas fa-user-circle me-1"></i><b><?php echo $_SESSION['user_name']; ?></b></span>
            <?php if ($es_admin): ?>
                <button type="button" class="btn btn-warning btn-sm rounded-pill px-3 me-2" data-bs-toggle="modal" data-bs-target="#modalUsuario"><i class="fas fa-plus"></i></button>
            <?php endif; ?>
            <a href="?logout=true" class="btn btn-danger btn-sm rounded-pill px-3 shadow-sm"><i class="fas fa-power-off"></i></a>
        </div>
    </div>
</nav>

<div class="container-fluid px-2 px-md-4 mb-5">
    <?php if (isset($_SESSION['mensaje'])): ?>
        <div class='alert alert-<?php echo $_SESSION['tipo_mensaje']; ?> alert-dismissible fade show border-0 shadow-sm' role='alert'>
            <i class='fas fa-info-circle me-2'></i> <?php echo $_SESSION['mensaje']; ?>
            <button type='button' class='btn-close' data-bs-dismiss='alert'></button>
        </div>
        <?php unset($_SESSION['mensaje']); unset($_SESSION['tipo_mensaje']); ?>
    <?php endif; ?>

    <div class="row g-3">
        <!-- FORMULARIO DE ASIGNACIÓN -->
        <div class="col-12 col-lg-4 col-xl-3">
            <div class="card card-main p-3 p-md-4 border-top border-4 h-100" style="border-top-color: var(--color-modulo) !important;">
                <h5 class="mb-3 fw-bold text-dark"><i class="fas fa-edit me-2" style="color: var(--color-modulo);"></i>Programar Días</h5>
                
                <?php if ($registro_abierto): ?>
                    <form action="guardar_turno.php" method="POST">
                        <input type="hidden" name="mes_objetivo" value="<?php echo $mes_objetivo; ?>">
                        <input type="hidden" name="jornada" value="<?php echo htmlspecialchars($jornada); ?>">
                        <input type="hidden" name="rol" value="<?php echo htmlspecialchars($rol_seleccionado); ?>">
                        
                        <div class="mb-3">
                            <label class="form-label fw-bold small text-secondary">Colaborador a asignar:</label>
                            <?php if ($es_admin): ?>
                                <select name="colaborador" class="form-select bg-light shadow-sm">
                                    <?php 
                                    if(empty($colaboradores_permitidos)){
                                        echo "<option value=''>No hay personal asignado a este rol</option>";
                                    } else {
                                        foreach($colaboradores_permitidos as $c) {
                                            $sel = ($c['id_colaborador'] == $mi_id) ? "selected" : "";
                                            echo "<option value='".$c['id_colaborador']."' $sel>".htmlspecialchars($c['nombre'])."</option>";
                                        } 
                                    }
                                    ?>
                                </select>
                            <?php else: ?>
                                <input type="hidden" name="colaborador" value="<?php echo $mi_id; ?>">
                                <div class="p-2 bg-light border rounded small fw-bold text-dark"><?php echo $_SESSION['user_name']; ?></div>
                            <?php endif; ?>
                        </div>

                        <div class="alert alert-light border small py-2 mb-3 shadow-sm d-flex align-items-center">
                            <i class="fas fa-info-circle me-2 fs-5" style="color: var(--color-modulo);"></i> 
                            <?php if($ilimitado): ?>
                                <div>Cupos <b>ilimitados</b> por día en este módulo.</div>
                            <?php else: ?>
                                <div>Cupo máximo: <b><?php echo $conf_actual['cupo']; ?> persona(s)</b> por día.</div>
                            <?php endif; ?>
                        </div>

                        <label class="form-label fw-bold small mb-2 text-secondary">Días (<?php echo $nombre_mes_es; ?>):</label>
                        <div class="day-check-container mb-4 shadow-sm">
                            <div class="row g-2">
                                <?php for ($i = 1; $i <= $total_dias; $i++) {
                                    $fecha_it = $mes_objetivo . '-' . str_pad($i, 2, '0', STR_PAD_LEFT);
                                    
                                    // Comprobar estado de cupos
                                    $ocupantes = isset($grilla[$fecha_it]) ? count($grilla[$fecha_it]) : 0;
                                    $estado_badge = "";
                                    $disabled = "";
                                    $opacidad = "";
                                    
                                    if ($ilimitado) {
                                        if ($ocupantes > 0) {
                                            $estado_badge = "<span class='badge bg-success ms-auto' style='font-size: 0.6rem;'>$ocupantes asignados</span>";
                                        }
                                    } else {
                                        if ($ocupantes >= $conf_actual['cupo']) {
                                            $estado_badge = "<span class='badge bg-danger ms-auto' style='font-size: 0.6rem;'>Lleno</span>";
                                        } elseif ($ocupantes > 0) {
                                            $estado_badge = "<span class='badge bg-success ms-auto' style='font-size: 0.6rem;'>$ocupantes/{$conf_actual['cupo']}</span>";
                                        }
                                    }

                                    $nom_dia = date('D', strtotime($fecha_it));
                                    $dias_es_corto = ['Mon'=>'Lun', 'Tue'=>'Mar', 'Wed'=>'Mié', 'Thu'=>'Jue', 'Fri'=>'Vie', 'Sat'=>'Sáb', 'Sun'=>'Dom'];

                                    echo "
                                    <div class='col-6 col-lg-12'>
                                        <div class='form-check p-2 border rounded bg-white shadow-sm d-flex align-items-center' style='$opacidad'>
                                            <input class='form-check-input ms-0 me-2' type='checkbox' name='fechas[]' value='$fecha_it' id='f_$i' $disabled>
                                            <label class='form-check-label small w-100 d-flex align-items-center' for='f_$i'>
                                                <b>{$dias_es_corto[$nom_dia]} $i</b>
                                                $estado_badge
                                            </label>
                                        </div>
                                    </div>";
                                } ?>
                            </div>
                        </div>
                        <button type="submit" class="btn w-100 fw-bold py-2 shadow-sm badge-modulo">GUARDAR ASIGNACIONES</button>
                    </form>
                <?php else: ?>
                    <div class="alert alert-secondary text-center py-5 border-0 shadow-sm">
                        <i class="fas fa-lock fs-1 text-muted mb-3 d-block opacity-50"></i>
                        <h6 class="fw-bold">Registro Cerrado</h6>
                        <p class="small text-muted mb-0">La plataforma se habilita a fin de mes.</p>
                    </div>
                <?php endif; ?>
            </div>
        </div>

        <!-- CALENDARIO DEL MÓDULO -->
        <div class="col-12 col-lg-8 col-xl-9">
            <div class="card card-main p-3 p-md-4 border-top border-4 h-100" style="border-top-color: var(--idmji-blue) !important;">
                <div class="d-flex justify-content-between align-items-center mb-3 flex-wrap gap-2">
                    <h5 class="fw-bold mb-0 text-dark">
                        Calendario <span style="color: var(--color-modulo);"><?php echo htmlspecialchars($rol_seleccionado); ?></span>
                    </h5>
                    <div>
                        <a href="reporte.php?jornada=<?php echo urlencode($jornada); ?>&rol=<?php echo urlencode($rol_seleccionado); ?>&mes=<?php echo urlencode($mes_objetivo); ?>" target="_blank" class="btn btn-outline-secondary btn-sm rounded-pill fw-bold px-3 shadow-sm me-2">
                            <i class="fas fa-file-pdf text-danger me-1"></i> PDF
                        </a>
                        <button type="button" class="btn btn-outline-danger btn-sm rounded-pill fw-bold px-3 shadow-sm" onclick="revisarPendientes()" data-bs-toggle="modal" data-bs-target="#modalPendientes">
                            <i class="fas fa-search me-1"></i> Ver Faltantes
                        </button>
                    </div>
                </div>
                
                <div class="table-responsive rounded shadow-sm border border-light">
                    <div class="cal-grid" style="min-width: 800px;">
                        <div class="cal-header">LUNES</div><div class="cal-header">MARTES</div><div class="cal-header">MIÉRCOLES</div><div class="cal-header">JUEVES</div><div class="cal-header">VIERNES</div><div class="cal-header">SÁBADO</div><div class="cal-header">DOMINGO</div>
                        <?php 
                        for ($i = 1; $i < $dia_semana_inicio; $i++) echo "<div class='cal-cell empty border-0 bg-light'></div>";
                        for ($dia = 1; $dia <= $total_dias; $dia++) {
                            $fecha_str = $mes_objetivo . '-' . str_pad($dia, 2, '0', STR_PAD_LEFT);
                            $ocupantes_hoy = isset($grilla[$fecha_str]) ? count($grilla[$fecha_str]) : 0;
                            
                            $incompleto = $ilimitado ? ($ocupantes_hoy == 0) : ($ocupantes_hoy < $conf_actual['cupo']);
                            
                            echo "<div class='cal-cell ".($incompleto ? 'incomplete' : '')."' onclick='verDetalleDia(\"$fecha_str\", \"$dia\", \"$nombre_mes_es\")' data-bs-toggle='modal' data-bs-target='#modalDetalle'>";
                            echo "<div class='cal-day-num'>$dia ";
                            if ($incompleto) {
                                if ($ilimitado) {
                                    echo "<span class='badge-missing'>Sin asignar</span>";
                                } else {
                                    $faltan = $conf_actual['cupo'] - $ocupantes_hoy;
                                    echo "<span class='badge-missing'>Falta $faltan</span>";
                                }
                            }
                            echo "</div>";
                            
                            if (isset($grilla[$fecha_str])) {
                                foreach($grilla[$fecha_str] as $c) {
                                    $mio = ($c['id_col'] == $mi_id) ? 'mi-turno' : '';
                                    echo "<div class='role-tag badge-modulo $mio'><i class='fas fa-user me-1 opacity-75'></i>{$c['nombre']}</div>";
                                }
                            }
                            echo "</div>";
                        }
                        ?>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

<!-- Modal Detalle -->
<div class="modal fade" id="modalDetalle" tabindex="-1">
  <div class="modal-dialog modal-dialog-centered">
    <div class="modal-content border-0 shadow-lg">
      <div class="modal-header border-0 pb-0">
          <h5 class="modal-title fw-bold" id="detalleTitulo" style="color: var(--color-modulo);">Detalle del Día</h5>
          <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
      </div>
      <div class="modal-body p-4" id="detalleCuerpo"></div>
    </div>
  </div>
</div>

<!-- Modal Pendientes -->
<div class="modal fade" id="modalPendientes" tabindex="-1">
  <div class="modal-dialog modal-dialog-centered">
    <div class="modal-content border-0 shadow-lg">
      <div class="modal-header bg-danger text-white border-0">
          <h5 class="modal-title fw-bold"><i class="fas fa-exclamation-circle me-2"></i>Días Incompletos</h5>
          <button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"></button>
      </div>
      <div class="modal-body p-3">
          <p class="text-muted small mb-3">Días donde el módulo <b><?php echo htmlspecialchars($rol_seleccionado); ?> (<?php echo htmlspecialchars($jornada); ?>)</b> necesita personal:</p>
          <div id="pendientesCuerpo" style="max-height: 350px; overflow-y: auto;"></div>
      </div>
    </div>
  </div>
</div>

<!-- Modal Nuevo Usuario -->
<?php if ($es_admin): ?>
<div class="modal fade" id="modalUsuario" tabindex="-1">
  <div class="modal-dialog modal-dialog-centered">
    <div class="modal-content border-0 shadow-lg">
      <div class="modal-header bg-warning text-dark border-0">
        <h5 class="modal-title fw-bold">Nuevo Colaborador</h5>
        <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
      </div>
      <form action="guardar_usuario.php" method="POST">
          <div class="modal-body p-4">
              <div class="mb-3"><input type="text" name="nuevo_nombre" class="form-control" placeholder="NOMBRE COMPLETO" required style="text-transform: uppercase;"></div>
              <div class="mb-3"><input type="tel" name="nuevo_tel" class="form-control" placeholder="TELÉFONO (OPCIONAL)"></div>
              
              <div class="row">
                  <div class="col-6 mb-2">
                      <label class="form-label fw-bold small text-secondary">Rol 1:</label>
                      <select name="rol_1" class="form-select border-warning-subtle shadow-sm">
                          <option value="">Ninguno</option>
                          <option value="Pasillos">Pasillos</option>
                          <option value="Baños">Baños</option>
                          <option value="Vigilancia">Vigilancia</option>
                      </select>
                  </div>
                  <div class="col-6 mb-2">
                      <label class="form-label fw-bold small text-secondary">Rol 2:</label>
                      <select name="rol_2" class="form-select border-warning-subtle shadow-sm">
                          <option value="">Ninguno</option>
                          <option value="Pasillos">Pasillos</option>
                          <option value="Baños">Baños</option>
                          <option value="Vigilancia">Vigilancia</option>
                      </select>
                  </div>
              </div>
          </div>
          <div class="modal-footer border-0"><button type="submit" class="btn btn-warning fw-bold px-4 shadow-sm">CREAR</button></div>
      </form>
    </div>
  </div>
</div>
<?php endif; ?>

<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
<script>
    const DATA_MES = <?php echo json_encode($grilla); ?>;
    const MI_ID = <?php echo $mi_id; ?>;
    const ES_ADMIN = <?php echo $es_admin ? 'true' : 'false'; ?>;
    const TOTAL_DIAS = <?php echo $total_dias; ?>;
    const MES_ANIO = "<?php echo $mes_objetivo; ?>";
    const ROL_ACTUAL = "<?php echo $rol_seleccionado; ?>";
    const JORNADA_ACTUAL = "<?php echo $jornada; ?>";
    const CUPO_MAXIMO = <?php echo $conf_actual['cupo']; ?>;
    const ILIMITADO = (CUPO_MAXIMO >= 999);

    function verDetalleDia(fecha, dia, mes) {
        const cuerpo = document.getElementById('detalleCuerpo');
        document.getElementById('detalleTitulo').innerText = `${dia} de ${mes.toLowerCase()}`;
        const asignadosHoy = DATA_MES[fecha] || [];

        let html = '<div class="list-group list-group-flush shadow-sm rounded-3 border">';
        if (asignadosHoy.length > 0) {
            asignadosHoy.forEach(c => {
                const puedeEliminar = ES_ADMIN || (c.id_col == MI_ID);
                const urlEliminar = `eliminar_turno.php?id=${c.id_turno}&jornada=${JORNADA_ACTUAL}&rol=${encodeURIComponent(ROL_ACTUAL)}`;
                html += `<div class="list-group-item d-flex justify-content-between align-items-center py-3">
                            <span class="fw-bold text-secondary"><i class="fas fa-check-circle text-success me-2"></i>${c.nombre}</span>
                            ${puedeEliminar ? `<a href="${urlEliminar}" class="btn btn-outline-danger btn-sm border-0" onclick="return confirm('¿Quitar a este colaborador?')"><i class="fas fa-trash-alt"></i></a>` : ''}
                         </div>`;
            });
        } else {
            html += `<div class="list-group-item text-center py-4 text-muted"><i class="fas fa-calendar-times fs-2 mb-2 d-block opacity-25"></i>No hay asignaciones este día</div>`;
        }
        
        // Mostrar cupos disponibles
        if (ILIMITADO) {
            html += `<div class="list-group-item bg-light text-center text-success small fw-bold py-2">Sin límite de cupos</div>`;
        } else {
            const faltan = CUPO_MAXIMO - asignadosHoy.length;
            if(faltan > 0) {
                html += `<div class="list-group-item bg-light text-center text-primary small fw-bold py-2">Quedan ${faltan} cupo(s) disponibles</div>`;
            }
        }
        
        cuerpo.innerHTML = html + '</div>';
    }

    function revisarPendientes() {
        const cuerpo = document.getElementById('pendientesCuerpo');
        let html = ''; let faltas = 0;

        for (let dia = 1; dia <= TOTAL_DIAS; dia++) {
            const fechaStr = `${MES_ANIO}-${dia.toString().padStart(2, '0')}`;
            const asignados = DATA_MES[fechaStr] ? DATA_MES[fechaStr].length : 0;
            
            let incompleto = false;
            let textoFalta = "";

            if (ILIMITADO) {
                if (asignados === 0) {
                    incompleto = true;
                    textoFalta = "Sin asignar";
                }
            } else {
                const faltan = CUPO_MAXIMO - asignados;
                if (faltan > 0) {
                    incompleto = true;
                    textoFalta = `Faltan ${faltan}`;
                }
            }
            
            if (incompleto) {
                faltas++;
                html += `<div class="card mb-2 p-3 shadow-sm border-0" style="border-left: 4px solid #dc3545;">
                            <div class="d-flex justify-content-between align-items-center">
                                <span class="fw-bold text-dark">Día ${dia}</span>
                                <span class="badge bg-danger bg-opacity-10 text-danger border border-danger border-opacity-25 px-2 py-1">${textoFalta}</span>
                            </div>
                         </div>`;
            }
        }
        if (faltas === 0) html = '<div class="alert alert-success text-center border-0"><i class="fas fa-check-circle fs-2 d-block mb-2"></i>¡Módulo cubierto al 100%!</div>';
        cuerpo.innerHTML = html;
    }
</script>
</body>
</html>