<?php
// concurso_nobel/admin/salones.php
// Control administrativo de salones, cupos, responsables y participantes asignados.
// Compatible con ADMIN_GLOBAL sin concurso fijo.
// Muestra salones existentes, ocupación máxima de 30, docente responsable del salón,
// participantes asignados y participantes pendientes sin salón.

declare(strict_types=1);

session_start();

require_once __DIR__ . '/../includes/db.php';

date_default_timezone_set('America/Lima');

const CN_MAX_CUPO_SALON = 30;

function sa_h($valor): string
{
    return htmlspecialchars((string)$valor, ENT_QUOTES, 'UTF-8');
}

function sa_redirigir(string $url): void
{
    header('Location: ' . $url);
    exit;
}

function sa_int_get(string $key, int $default = 0): int
{
    $valor = $_GET[$key] ?? $default;
    return is_numeric($valor) ? max(0, (int)$valor) : $default;
}

function sa_text_get(string $key, string $default = ''): string
{
    return trim((string)($_GET[$key] ?? $default));
}

function sa_limpiar_sesion(): void
{
    unset(
        $_SESSION['cn_acceso_id'],
        $_SESSION['cn_concurso_id'],
        $_SESSION['cn_grupo_id'],
        $_SESSION['cn_salon_id'],
        $_SESSION['cn_codigo'],
        $_SESSION['cn_responsable'],
        $_SESSION['cn_last_activity'],
        $_SESSION['cn_admin_global'],
        $_SESSION['cn_admin_concurso_trabajo']
    );
}

function sa_tabla_existe(mysqli $conn, string $tabla): bool
{
    $tabla = mysqli_real_escape_string($conn, $tabla);
    $res = @mysqli_query($conn, "SHOW TABLES LIKE '{$tabla}'");
    return $res && mysqli_num_rows($res) > 0;
}

function sa_auditar(
    mysqli $conn,
    ?int $idConcurso,
    ?int $idGrupo,
    ?int $idAcceso,
    ?int $idParticipante,
    string $accion,
    string $detalle
): void {
    if (!sa_tabla_existe($conn, 'concurso_auditoria')) {
        return;
    }

    $ip = $_SERVER['REMOTE_ADDR'] ?? '';
    $ua = $_SERVER['HTTP_USER_AGENT'] ?? '';

    $stmt = mysqli_prepare($conn, "
        INSERT INTO concurso_auditoria
            (id_concurso, id_grupo, id_acceso, id_participante, accion, detalle, ip, user_agent, created_at)
        VALUES
            (?, ?, ?, ?, ?, ?, ?, ?, NOW())
    ");

    if (!$stmt) {
        return;
    }

    mysqli_stmt_bind_param($stmt, 'iiiissss', $idConcurso, $idGrupo, $idAcceso, $idParticipante, $accion, $detalle, $ip, $ua);
    mysqli_stmt_execute($stmt);
    mysqli_stmt_close($stmt);
}

function sa_count_query(mysqli $conn, string $sql, string $types = '', array $params = []): int
{
    $stmt = mysqli_prepare($conn, $sql);

    if (!$stmt) {
        return 0;
    }

    if ($types !== '' && !empty($params)) {
        mysqli_stmt_bind_param($stmt, $types, ...$params);
    }

    if (!mysqli_stmt_execute($stmt)) {
        mysqli_stmt_close($stmt);
        return 0;
    }

    $res = mysqli_stmt_get_result($stmt);

    if (!$res) {
        mysqli_stmt_close($stmt);
        return 0;
    }

    $row = mysqli_fetch_assoc($res);
    mysqli_stmt_close($stmt);

    return (int)($row['total'] ?? 0);
}

function sa_contar_participantes(mysqli $conn, int $idConcurso, int $idGrupo, bool $soloPendientes): int
{
    if ($idConcurso <= 0) {
        return 0;
    }

    $sql = "
        SELECT COUNT(*) AS total
        FROM concurso_participantes p
        WHERE p.id_concurso = ?
          AND p.estado = 'ACTIVO'
    ";

    $tipos = 'i';
    $params = [$idConcurso];

    if ($idGrupo > 0) {
        $sql .= " AND p.id_grupo = ? ";
        $tipos .= 'i';
        $params[] = $idGrupo;
    }

    if ($soloPendientes) {
        $sql .= " AND p.id_salon IS NULL ";
    }

    return sa_count_query($conn, $sql, $tipos, $params);
}

function sa_obtener_concursos(mysqli $conn, bool $esAdminGlobal, int $idConcursoAcceso): array
{
    $concursos = [];

    if ($esAdminGlobal) {
        $sql = "
            SELECT id_concurso, nombre, subtitulo, anio, estado, fecha_inicio, fecha_fin
            FROM concursos
            ORDER BY id_concurso DESC
        ";

        $res = mysqli_query($conn, $sql);

        if ($res) {
            while ($row = mysqli_fetch_assoc($res)) {
                $concursos[] = $row;
            }

            mysqli_free_result($res);
        }

        return $concursos;
    }

    if ($idConcursoAcceso <= 0) {
        return [];
    }

    $stmt = mysqli_prepare($conn, "
        SELECT id_concurso, nombre, subtitulo, anio, estado, fecha_inicio, fecha_fin
        FROM concursos
        WHERE id_concurso = ?
        LIMIT 1
    ");

    if (!$stmt) {
        return [];
    }

    mysqli_stmt_bind_param($stmt, 'i', $idConcursoAcceso);
    mysqli_stmt_execute($stmt);
    $res = mysqli_stmt_get_result($stmt);

    if ($res) {
        while ($row = mysqli_fetch_assoc($res)) {
            $concursos[] = $row;
        }
    }

    mysqli_stmt_close($stmt);
    return $concursos;
}

function sa_concurso_valido(array $concursos, int $idConcurso): bool
{
    foreach ($concursos as $concurso) {
        if ((int)$concurso['id_concurso'] === $idConcurso) {
            return true;
        }
    }

    return false;
}

$idAccesoSesion = (int)($_SESSION['cn_acceso_id'] ?? 0);
$idConcursoSesion = (int)($_SESSION['cn_concurso_id'] ?? 0);

if ($idAccesoSesion <= 0) {
    sa_redirigir('../index.php');
}

$ultimaActividad = (int)($_SESSION['cn_last_activity'] ?? 0);

if ($ultimaActividad > 0 && (time() - $ultimaActividad) > 10800) {
    sa_auditar(
        $conn,
        $idConcursoSesion > 0 ? $idConcursoSesion : null,
        null,
        $idAccesoSesion,
        null,
        'SESION_EXPIRADA_ADMIN_SALONES',
        'Sesión expirada en control de salones.'
    );

    sa_limpiar_sesion();
    sa_redirigir('../index.php');
}

$stmtAcceso = mysqli_prepare($conn, "
    SELECT
        a.id_acceso,
        a.id_concurso,
        a.id_grupo,
        a.id_salon,
        a.codigo,
        a.nombre_responsable,
        a.tipo_acceso,
        a.puede_registrar_participantes,
        a.puede_registrar_resultados,
        a.puede_ver_resultados,
        a.puede_administrar,
        a.activo,
        a.fecha_expiracion,
        c.nombre AS concurso_nombre,
        c.subtitulo AS concurso_subtitulo,
        c.estado AS concurso_estado,
        c.fecha_inicio,
        c.fecha_fin
    FROM concurso_accesos a
    LEFT JOIN concursos c ON c.id_concurso = a.id_concurso
    WHERE a.id_acceso = ?
    LIMIT 1
");

if (!$stmtAcceso) {
    http_response_code(500);
    die('No se pudo validar el acceso administrativo.');
}

mysqli_stmt_bind_param($stmtAcceso, 'i', $idAccesoSesion);
mysqli_stmt_execute($stmtAcceso);
$resAcceso = mysqli_stmt_get_result($stmtAcceso);
$acceso = $resAcceso ? mysqli_fetch_assoc($resAcceso) : null;
mysqli_stmt_close($stmtAcceso);

if (!$acceso) {
    sa_limpiar_sesion();
    sa_redirigir('../index.php');
}

$hoy = date('Y-m-d');
$idConcursoAcceso = $acceso['id_concurso'] !== null ? (int)$acceso['id_concurso'] : 0;
$tipoAcceso = strtoupper((string)($acceso['tipo_acceso'] ?? ''));
$esAdminGlobal = $tipoAcceso === 'ADMIN_GLOBAL' || ($idConcursoAcceso <= 0 && (int)$acceso['puede_administrar'] === 1);

if ((int)$acceso['activo'] !== 1) {
    sa_limpiar_sesion();
    sa_redirigir('../index.php');
}

if (!empty($acceso['fecha_expiracion']) && $hoy > (string)$acceso['fecha_expiracion']) {
    sa_limpiar_sesion();
    sa_redirigir('../index.php');
}

if (!$esAdminGlobal) {
    if ($idConcursoAcceso <= 0 || $idConcursoSesion <= 0 || $idConcursoAcceso !== $idConcursoSesion) {
        sa_limpiar_sesion();
        sa_redirigir('../index.php');
    }

    if (
        strtoupper((string)$acceso['concurso_estado']) !== 'ACTIVO' ||
        (!empty($acceso['fecha_inicio']) && $hoy < (string)$acceso['fecha_inicio']) ||
        (!empty($acceso['fecha_fin']) && $hoy > (string)$acceso['fecha_fin'])
    ) {
        sa_limpiar_sesion();
        sa_redirigir('../index.php');
    }
}

if ((int)$acceso['puede_administrar'] !== 1) {
    http_response_code(403);
    die('Acceso denegado. Este módulo es solo para administrador.');
}

$_SESSION['cn_last_activity'] = time();

if ($esAdminGlobal) {
    $_SESSION['cn_admin_global'] = 1;
}

$concursos = sa_obtener_concursos($conn, $esAdminGlobal, $idConcursoAcceso);

$idConcursoSolicitado = sa_int_get('id_concurso', 0);
$idConcursoSesionTrabajo = (int)($_SESSION['cn_admin_concurso_trabajo'] ?? 0);

if ($esAdminGlobal) {
    if ($idConcursoSolicitado > 0 && sa_concurso_valido($concursos, $idConcursoSolicitado)) {
        $idConcurso = $idConcursoSolicitado;
    } elseif ($idConcursoSesionTrabajo > 0 && sa_concurso_valido($concursos, $idConcursoSesionTrabajo)) {
        $idConcurso = $idConcursoSesionTrabajo;
    } elseif (!empty($concursos)) {
        $idConcurso = (int)$concursos[0]['id_concurso'];
    } else {
        $idConcurso = 0;
    }

    if ($idConcurso > 0) {
        $_SESSION['cn_admin_concurso_trabajo'] = $idConcurso;
    }
} else {
    $idConcurso = $idConcursoAcceso;
}

$idGrupo = sa_int_get('id_grupo', 0);
$idSalon = sa_int_get('id_salon', 0);
$modo = sa_text_get('modo', '');
$busqueda = sa_text_get('q', '');

$concursoActual = null;

foreach ($concursos as $concursoFila) {
    if ((int)$concursoFila['id_concurso'] === $idConcurso) {
        $concursoActual = $concursoFila;
        break;
    }
}

if ($idConcurso <= 0 || !$concursoActual) {
    $idConcurso = 0;
    $idGrupo = 0;
    $idSalon = 0;
    $modo = '';
    $busqueda = '';
}

$grupos = [];

if ($idConcurso > 0) {
    $stmtGrupos = mysqli_prepare($conn, "
        SELECT id_grupo, nombre, nivel, grado_nombre, orden
        FROM concurso_grupos
        WHERE id_concurso = ?
          AND estado = 1
        ORDER BY orden ASC, nivel ASC, grado_orden ASC, nombre ASC
    ");

    if ($stmtGrupos) {
        mysqli_stmt_bind_param($stmtGrupos, 'i', $idConcurso);
        mysqli_stmt_execute($stmtGrupos);
        $resGrupos = mysqli_stmt_get_result($stmtGrupos);

        while ($row = mysqli_fetch_assoc($resGrupos)) {
            $grupos[] = $row;
        }

        mysqli_stmt_close($stmtGrupos);
    }
}

$idGrupoValido = $idGrupo === 0;

foreach ($grupos as $grupoFila) {
    if ((int)$grupoFila['id_grupo'] === $idGrupo) {
        $idGrupoValido = true;
        break;
    }
}

if (!$idGrupoValido) {
    $idGrupo = 0;
}

$salones = [];

if ($idConcurso > 0) {
    $sqlSalones = "
        SELECT
            g.id_grupo,
            g.nombre AS grado,
            g.orden AS orden_grupo,
            s.id_salon,
            s.nombre_salon,
            s.codigo_salon,
            s.capacidad,
            s.orden AS orden_salon,
            r.dni_responsable,
            r.nombre_responsable AS docente_responsable,
            r.created_at AS responsable_created_at,
            COUNT(p.id_participante) AS ocupados
        FROM concurso_salones s
        INNER JOIN concurso_grupos g ON g.id_grupo = s.id_grupo
        LEFT JOIN (
            SELECT
                r1.id_responsable,
                r1.id_concurso,
                r1.id_grupo,
                r1.id_salon,
                r1.id_acceso,
                r1.dni_responsable,
                r1.nombre_responsable,
                r1.created_at
            FROM concurso_salon_responsables r1
            INNER JOIN (
                SELECT id_salon, MAX(id_responsable) AS max_id
                FROM concurso_salon_responsables
                WHERE estado = 'ACTIVO'
                GROUP BY id_salon
            ) ult
                ON ult.id_salon = r1.id_salon
               AND ult.max_id = r1.id_responsable
            WHERE r1.estado = 'ACTIVO'
        ) r
            ON r.id_salon = s.id_salon
        LEFT JOIN concurso_participantes p
            ON p.id_salon = s.id_salon
           AND p.estado = 'ACTIVO'
        WHERE s.id_concurso = ?
          AND s.estado = 1
    ";

    if ($idGrupo > 0) {
        $sqlSalones .= " AND s.id_grupo = ? ";
    }

    $sqlSalones .= "
        GROUP BY
            g.id_grupo,
            g.nombre,
            g.orden,
            s.id_salon,
            s.nombre_salon,
            s.codigo_salon,
            s.capacidad,
            s.orden,
            r.dni_responsable,
            r.nombre_responsable,
            r.created_at
        ORDER BY g.orden ASC, s.orden ASC, s.nombre_salon ASC
    ";

    $stmtSalones = mysqli_prepare($conn, $sqlSalones);

    if ($stmtSalones) {
        if ($idGrupo > 0) {
            mysqli_stmt_bind_param($stmtSalones, 'ii', $idConcurso, $idGrupo);
        } else {
            mysqli_stmt_bind_param($stmtSalones, 'i', $idConcurso);
        }

        mysqli_stmt_execute($stmtSalones);
        $resSalones = mysqli_stmt_get_result($stmtSalones);

        while ($row = mysqli_fetch_assoc($resSalones)) {
            $capacidadBd = (int)($row['capacidad'] ?? CN_MAX_CUPO_SALON);
            $row['capacidad_final'] = $capacidadBd > 0 ? min($capacidadBd, CN_MAX_CUPO_SALON) : CN_MAX_CUPO_SALON;
            $row['libres'] = max(0, (int)$row['capacidad_final'] - (int)$row['ocupados']);
            $row['tiene_responsable'] = !empty($row['dni_responsable']) && !empty($row['docente_responsable']);
            $salones[] = $row;
        }

        mysqli_stmt_close($stmtSalones);
    }
}

$idSalonValido = $idSalon === 0;

foreach ($salones as $salonFila) {
    if ((int)$salonFila['id_salon'] === $idSalon) {
        $idSalonValido = true;
        break;
    }
}

if (!$idSalonValido) {
    $idSalon = 0;
}

$totalSalones = count($salones);
$totalOcupados = 0;
$totalCapacidad = 0;
$totalConResponsable = 0;

foreach ($salones as $s) {
    $totalOcupados += (int)$s['ocupados'];
    $totalCapacidad += (int)$s['capacidad_final'];

    if (!empty($s['tiene_responsable'])) {
        $totalConResponsable++;
    }
}

$totalSinResponsable = max(0, $totalSalones - $totalConResponsable);
$totalLibres = max(0, $totalCapacidad - $totalOcupados);
$totalParticipantes = $idConcurso > 0 ? sa_contar_participantes($conn, $idConcurso, $idGrupo, false) : 0;
$totalPendientes = $idConcurso > 0 ? sa_contar_participantes($conn, $idConcurso, $idGrupo, true) : 0;

$participantes = [];
$tituloListado = 'Últimos participantes registrados';

if ($idConcurso > 0) {
    $sqlParticipantes = "
        SELECT
            p.id_participante,
            p.codigo_participante,
            p.documento,
            p.apellidos_nombres,
            p.institucion_educativa,
            p.tipo_institucion,
            p.codigo_modular_ie,
            p.nivel_modalidad_ie,
            p.created_at,
            g.nombre AS grado,
            s.nombre_salon,
            s.codigo_salon
        FROM concurso_participantes p
        LEFT JOIN concurso_grupos g ON g.id_grupo = p.id_grupo
        LEFT JOIN concurso_salones s ON s.id_salon = p.id_salon
        WHERE p.id_concurso = ?
          AND p.estado = 'ACTIVO'
    ";

    $tipos = 'i';
    $params = [$idConcurso];

    if ($idGrupo > 0) {
        $sqlParticipantes .= " AND p.id_grupo = ? ";
        $tipos .= 'i';
        $params[] = $idGrupo;
    }

    if ($idSalon > 0) {
        $sqlParticipantes .= " AND p.id_salon = ? ";
        $tipos .= 'i';
        $params[] = $idSalon;
        $modo = 'salon';
        $tituloListado = 'Participantes del salón seleccionado';
    } elseif ($modo === 'pendientes') {
        $sqlParticipantes .= " AND p.id_salon IS NULL ";
        $tituloListado = 'Participantes pendientes de salón';
    }

    if ($busqueda !== '') {
        $sqlParticipantes .= "
            AND (
                p.documento LIKE ?
                OR p.apellidos_nombres LIKE ?
                OR p.institucion_educativa LIKE ?
                OR p.codigo_participante LIKE ?
                OR p.codigo_modular_ie LIKE ?
            )
        ";
        $like = '%' . $busqueda . '%';
        $tipos .= 'sssss';
        $params[] = $like;
        $params[] = $like;
        $params[] = $like;
        $params[] = $like;
        $params[] = $like;
    }

    $sqlParticipantes .= "
        ORDER BY
            CASE WHEN p.id_salon IS NULL THEN 0 ELSE 1 END ASC,
            p.apellidos_nombres ASC,
            p.id_participante DESC
        LIMIT 300
    ";

    $stmtParticipantes = mysqli_prepare($conn, $sqlParticipantes);

    if ($stmtParticipantes) {
        mysqli_stmt_bind_param($stmtParticipantes, $tipos, ...$params);
        mysqli_stmt_execute($stmtParticipantes);
        $resParticipantes = mysqli_stmt_get_result($stmtParticipantes);

        while ($row = mysqli_fetch_assoc($resParticipantes)) {
            $participantes[] = $row;
        }

        mysqli_stmt_close($stmtParticipantes);
    }
}

$salonesPorGrupo = [];

foreach ($salones as $salon) {
    $salonesPorGrupo[(string)$salon['grado']][] = $salon;
}

sa_auditar(
    $conn,
    $idConcurso > 0 ? $idConcurso : null,
    $idGrupo > 0 ? $idGrupo : null,
    $idAccesoSesion,
    null,
    'SALONES_CONSULTADOS',
    'Administrador consultó control de salones y responsables.'
);

$nombreConcursoActual = $concursoActual
    ? trim((string)$concursoActual['nombre'] . ' ' . (string)$concursoActual['subtitulo'])
    : 'Sin concurso seleccionado';
?>
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <title>Control de salones | NOBEX</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/all.min.css">
    <link rel="stylesheet" href="../assets/css/menu_concurso.css?v=4">
    <style>
        *{box-sizing:border-box}body{margin:0;font-family:Arial,Helvetica,sans-serif;background:#f3f6fb;color:#111827}.top{background:linear-gradient(135deg,#111827,#1f2937);color:#fff;border-bottom:8px solid #ffcc00;padding:22px}.topin{max-width:1320px;margin:auto;display:flex;justify-content:space-between;gap:16px;align-items:center}.top h1{margin:0;font-size:28px;font-weight:900}.top p{margin:6px 0 0;color:#fde68a;font-weight:800}.top a{color:#fff;text-decoration:none;border:1px solid rgba(255,255,255,.45);padding:10px 14px;border-radius:12px;font-weight:900}.wrap{max-width:1320px;margin:24px auto;padding:0 18px 40px}.card{background:#fff;border:1px solid #e5e7eb;border-radius:18px;box-shadow:0 12px 30px rgba(15,23,42,.08);padding:20px;margin-bottom:18px}.filters{display:grid;grid-template-columns:1.2fr 1fr 1fr 1.4fr auto;gap:12px;align-items:end}.filters label{font-weight:900;color:#374151;font-size:13px}.filters select,.filters input{width:100%;border:1px solid #d1d5db;border-radius:12px;padding:11px;font-size:14px}.btn{display:inline-block;border:0;background:#1d4ed8;color:#fff;border-radius:12px;padding:11px 14px;font-weight:900;text-decoration:none;cursor:pointer}.btn.gray{background:#475569}.btn.warn{background:#92400e}.btn.disabled{background:#94a3b8;cursor:not-allowed;pointer-events:none}.stats{display:grid;grid-template-columns:repeat(6,1fr);gap:14px}.stat{background:#fff;border:1px solid #e5e7eb;border-radius:18px;padding:18px;box-shadow:0 12px 30px rgba(15,23,42,.08)}.stat b{font-size:31px;color:#1d4ed8}.stat.warning b{color:#b45309}.stat span{display:block;margin-top:6px;color:#64748b;font-size:13px;font-weight:900;text-transform:uppercase}.group-title{margin:26px 0 12px;background:#111827;color:#fff;border-radius:14px;padding:12px 14px;font-weight:900}.grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}.salon{border:1px solid #e5e7eb;border-radius:18px;background:#fff;padding:17px;box-shadow:0 10px 24px rgba(15,23,42,.06)}.salon.full{border-color:#fecaca;background:#fff7f7}.salon h3{margin:0 0 8px;font-size:18px}.code{font-size:12px;color:#1e40af;font-weight:900;word-break:break-all}.bar{height:12px;background:#e5e7eb;border-radius:999px;overflow:hidden;margin:13px 0}.bar i{display:block;height:100%;background:#1d4ed8}.full .bar i{background:#dc2626}.meta{display:flex;justify-content:space-between;gap:10px;color:#475569;font-weight:800;font-size:13px}.responsable{margin-top:13px;border-radius:13px;padding:11px;border:1px solid #e5e7eb;background:#f8fafc}.responsable.ok{background:#ecfdf5;border-color:#bbf7d0;color:#14532d}.responsable.pend{background:#fffbeb;border-color:#fde68a;color:#92400e}.responsable .label{font-size:11px;text-transform:uppercase;font-weight:900;letter-spacing:.04em;margin-bottom:5px}.responsable .name{font-weight:900;line-height:1.35}.responsable .dni{font-size:12px;margin-top:4px;font-weight:800}.salon-actions{display:flex;gap:8px;margin-top:13px}.salon-actions a{flex:1;text-align:center;text-decoration:none;border-radius:10px;padding:9px;font-weight:900;font-size:13px}.view{background:#eff6ff;color:#1d4ed8;border:1px solid #bfdbfe}.copy{background:#f8fafc;color:#334155;border:1px solid #e2e8f0}table{width:100%;border-collapse:collapse;font-size:14px}th,td{border-bottom:1px solid #e5e7eb;padding:10px;text-align:left;vertical-align:top}th{background:#f9fafb;color:#475569;font-size:12px;text-transform:uppercase}.badge{display:inline-block;border-radius:999px;padding:5px 8px;font-size:12px;font-weight:900}.ok{background:#dcfce7;color:#166534}.pend{background:#fef3c7;color:#92400e}.empty{border:1px dashed #cbd5e1;background:#f8fafc;border-radius:14px;padding:18px;color:#64748b;font-weight:800}.small{color:#64748b;font-size:13px}.headrow{display:flex;justify-content:space-between;gap:12px;align-items:center}.links{display:flex;gap:8px;flex-wrap:wrap}.notice{background:#eff6ff;border:1px solid #bfdbfe;color:#1e40af;border-radius:14px;padding:14px;font-weight:800;line-height:1.5;margin-bottom:18px}@media(max-width:1180px){.grid{grid-template-columns:repeat(3,1fr)}.stats{grid-template-columns:repeat(3,1fr)}}@media(max-width:1050px){.filters{grid-template-columns:1fr 1fr}.grid{grid-template-columns:repeat(2,1fr)}.topin,.headrow{flex-direction:column;align-items:flex-start}}@media(max-width:640px){.filters,.stats,.grid{grid-template-columns:1fr}table{display:block;overflow-x:auto}.top h1{font-size:22px}}
    </style>
</head>
<body class="cn-con-sidebar">
<?php include __DIR__ . '/../includes/sidebar_concurso.php'; ?>
<header class="top">
    <div class="topin">
        <div>
            <h1>Control de salones</h1>
            <p>
                Administrador: <?php echo sa_h($acceso['nombre_responsable']); ?>
                | Código: <?php echo sa_h($acceso['codigo']); ?>
                | <?php echo $esAdminGlobal ? 'ADMIN GLOBAL' : 'ADMIN DE CONCURSO'; ?>
            </p>
        </div>
        <div class="links">
            <a href="../panel.php">Panel</a>
            <a href="concursos.php">Concursos</a>
            <a href="codigos.php<?php echo $idConcurso > 0 ? '?id_concurso=' . sa_h($idConcurso) : ''; ?>">Códigos</a>
            <a href="../salir.php">Salir</a>
        </div>
    </div>
</header>

<main class="wrap">
    <?php if (empty($concursos)): ?>
        <section class="card">
            <div class="empty">
                Todavía no hay concursos registrados. Primero crea un concurso desde <strong>Administrar concursos</strong>.
            </div>
        </section>
    <?php else: ?>
        <section class="card">
            <form method="get" class="filters">
                <div>
                    <label>Concurso seleccionado para controlar</label>
                    <select name="id_concurso">
                        <?php foreach ($concursos as $c): ?>
                            <option value="<?php echo sa_h($c['id_concurso']); ?>" <?php echo (int)$c['id_concurso'] === $idConcurso ? 'selected' : ''; ?>>
                                <?php echo sa_h($c['nombre'] . ' ' . $c['subtitulo'] . ' | ' . $c['estado']); ?>
                            </option>
                        <?php endforeach; ?>
                    </select>
                </div>
                <div>
                    <label>Grado</label>
                    <select name="id_grupo">
                        <option value="0">Todos los grados</option>
                        <?php foreach ($grupos as $g): ?>
                            <option value="<?php echo sa_h($g['id_grupo']); ?>" <?php echo (int)$g['id_grupo'] === $idGrupo ? 'selected' : ''; ?>>
                                <?php echo sa_h($g['nombre']); ?>
                            </option>
                        <?php endforeach; ?>
                    </select>
                </div>
                <div>
                    <label>Vista</label>
                    <select name="modo">
                        <option value="" <?php echo $modo === '' ? 'selected' : ''; ?>>Todos / últimos</option>
                        <option value="pendientes" <?php echo $modo === 'pendientes' ? 'selected' : ''; ?>>Pendientes sin salón</option>
                    </select>
                </div>
                <div>
                    <label>Buscar participante</label>
                    <input type="text" name="q" value="<?php echo sa_h($busqueda); ?>" placeholder="DNI, nombres, código, modular o I.E.">
                </div>
                <button class="btn" type="submit">Filtrar</button>
            </form>
        </section>

        <?php if ($idConcurso <= 0): ?>
            <section class="notice">
                Selecciona un concurso para ver salones, cupos, responsables y participantes.
            </section>
        <?php else: ?>
            <section class="notice">
                Concurso actual: <strong><?php echo sa_h($nombreConcursoActual); ?></strong>.
                El docente responsable se registra cuando ingresa con el código de salón y confirma su DNI antes de asignar participantes.
            </section>

            <section class="stats">
                <div class="stat"><b><?php echo sa_h($totalSalones); ?></b><span>Salones</span></div>
                <div class="stat"><b><?php echo sa_h($totalCapacidad); ?></b><span>Capacidad total</span></div>
                <div class="stat"><b><?php echo sa_h($totalOcupados); ?></b><span>Asignados</span></div>
                <div class="stat"><b><?php echo sa_h($totalLibres); ?></b><span>Cupos libres</span></div>
                <div class="stat"><b><?php echo sa_h($totalConResponsable); ?></b><span>Con responsable</span></div>
                <div class="stat warning"><b><?php echo sa_h($totalSinResponsable); ?></b><span>Sin responsable</span></div>
            </section>

            <section class="card">
                <div class="headrow">
                    <div>
                        <h2 style="margin:0">Mapa de salones</h2>
                        <p class="small" style="margin:6px 0 0">Regla aplicada: máximo <?php echo CN_MAX_CUPO_SALON; ?> participantes por salón.</p>
                    </div>
                    <div class="links">
                        <a class="btn gray" href="salones.php?id_concurso=<?php echo sa_h($idConcurso); ?>&id_grupo=<?php echo sa_h($idGrupo); ?>&modo=pendientes">Ver pendientes</a>
                        <a class="btn warn" href="codigos.php?id_concurso=<?php echo sa_h($idConcurso); ?>">Ver códigos de salón</a>
                    </div>
                </div>

                <?php if (!empty($salonesPorGrupo)): ?>
                    <?php foreach ($salonesPorGrupo as $gradoNombre => $listaSalones): ?>
                        <div class="group-title"><?php echo sa_h($gradoNombre); ?></div>
                        <div class="grid">
                            <?php foreach ($listaSalones as $s): ?>
                                <?php
                                    $ocupados = (int)$s['ocupados'];
                                    $capacidad = (int)$s['capacidad_final'];
                                    $porcentaje = $capacidad > 0 ? min(100, (int)round(($ocupados / $capacidad) * 100)) : 0;
                                    $lleno = $ocupados >= $capacidad;
                                ?>
                                <article class="salon <?php echo $lleno ? 'full' : ''; ?>">
                                    <h3><?php echo sa_h($s['nombre_salon']); ?></h3>
                                    <div class="code"><?php echo sa_h($s['codigo_salon']); ?></div>
                                    <div class="bar"><i style="width:<?php echo sa_h($porcentaje); ?>%"></i></div>
                                    <div class="meta">
                                        <span><?php echo sa_h($ocupados); ?> / <?php echo sa_h($capacidad); ?></span>
                                        <span><?php echo $lleno ? 'Lleno' : 'Libres: ' . sa_h($s['libres']); ?></span>
                                    </div>

                                    <?php if (!empty($s['tiene_responsable'])): ?>
                                        <div class="responsable ok">
                                            <div class="label">Docente responsable</div>
                                            <div class="name"><?php echo sa_h($s['docente_responsable']); ?></div>
                                            <div class="dni">
                                                DNI: <?php echo sa_h($s['dni_responsable']); ?><br>
                                                Registro: <?php echo sa_h($s['responsable_created_at']); ?>
                                            </div>
                                        </div>
                                    <?php else: ?>
                                        <div class="responsable pend">
                                            <div class="label">Docente responsable</div>
                                            <div class="name">Pendiente de registro</div>
                                            <div class="dni">El docente se registrará al ingresar con este código.</div>
                                        </div>
                                    <?php endif; ?>

                                    <div class="salon-actions">
                                        <a class="view" href="salones.php?id_concurso=<?php echo sa_h($idConcurso); ?>&id_grupo=<?php echo sa_h($idGrupo); ?>&id_salon=<?php echo sa_h($s['id_salon']); ?>">Ver participantes</a>
                                        <a class="copy" href="codigos.php?id_concurso=<?php echo sa_h($idConcurso); ?>">Ver código</a>
                                    </div>
                                </article>
                            <?php endforeach; ?>
                        </div>
                    <?php endforeach; ?>
                <?php else: ?>
                    <div class="empty">No hay salones activos para este filtro.</div>
                <?php endif; ?>
            </section>

            <section class="card">
                <div class="headrow">
                    <div>
                        <h2 style="margin:0"><?php echo sa_h($tituloListado); ?></h2>
                        <p class="small" style="margin:6px 0 0">Se muestran hasta 300 registros según el filtro aplicado.</p>
                    </div>
                    <div class="links">
                        <a class="btn gray" href="salones.php?id_concurso=<?php echo sa_h($idConcurso); ?>&id_grupo=<?php echo sa_h($idGrupo); ?>">Limpiar selección</a>
                    </div>
                </div>

                <?php if (!empty($participantes)): ?>
                    <div style="overflow-x:auto;margin-top:14px">
                        <table>
                            <thead>
                                <tr>
                                    <th>Código</th>
                                    <th>DNI</th>
                                    <th>Apellidos y nombres</th>
                                    <th>I.E.</th>
                                    <th>Tipo</th>
                                    <th>Nivel I.E.</th>
                                    <th>Grado concurso</th>
                                    <th>Salón</th>
                                    <th>Registro</th>
                                </tr>
                            </thead>
                            <tbody>
                                <?php foreach ($participantes as $p): ?>
                                    <tr>
                                        <td><strong style="color:#1d4ed8"><?php echo sa_h($p['codigo_participante']); ?></strong></td>
                                        <td><?php echo sa_h($p['documento']); ?></td>
                                        <td><strong><?php echo sa_h($p['apellidos_nombres']); ?></strong></td>
                                        <td>
                                            <?php echo sa_h($p['institucion_educativa']); ?>
                                            <?php if (!empty($p['codigo_modular_ie'])): ?>
                                                <br><span class="small">Modular: <?php echo sa_h($p['codigo_modular_ie']); ?></span>
                                            <?php endif; ?>
                                        </td>
                                        <td><?php echo sa_h($p['tipo_institucion']); ?></td>
                                        <td><?php echo sa_h($p['nivel_modalidad_ie'] ?: ''); ?></td>
                                        <td><?php echo sa_h($p['grado'] ?: 'Pendiente'); ?></td>
                                        <td>
                                            <?php if (!empty($p['nombre_salon'])): ?>
                                                <span class="badge ok"><?php echo sa_h($p['nombre_salon']); ?></span><br>
                                                <span class="small"><?php echo sa_h($p['codigo_salon']); ?></span>
                                            <?php else: ?>
                                                <span class="badge pend">Pendiente</span>
                                            <?php endif; ?>
                                        </td>
                                        <td><?php echo sa_h($p['created_at']); ?></td>
                                    </tr>
                                <?php endforeach; ?>
                            </tbody>
                        </table>
                    </div>
                <?php else: ?>
                    <div class="empty" style="margin-top:14px">No hay participantes para el filtro seleccionado.</div>
                <?php endif; ?>
            </section>
        <?php endif; ?>
    <?php endif; ?>
</main>
</body>
</html>
