<?php
declare(strict_types=1);

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

$ctx = omr_context('admin');
$conn = $ctx['conn'];
$idConcurso = (int)$ctx['id_concurso'];
$grupos = omr_grupos($conn, $idConcurso, 0);

$idGrupo = (int)($_POST['id_grupo'] ?? ($_GET['id_grupo'] ?? 0));
$tipo = strtoupper(trim((string)($_POST['tipo'] ?? ($_GET['tipo'] ?? 'A'))));
if (!omr_tipo_valido($tipo)) {
    $tipo = 'A';
}

if ($idGrupo <= 0 && !empty($grupos)) {
    $idGrupo = (int)$grupos[0]['id_grupo'];
}

$grupo = $idGrupo > 0 ? omr_grupo_por_id($conn, $idConcurso, $idGrupo) : null;
$totalPreguntas = $grupo ? max(1, min(80, (int)$grupo['total_preguntas'])) : 0;

if (empty($_SESSION['csrf_omr_clave'])) {
    $_SESSION['csrf_omr_clave'] = bin2hex(random_bytes(32));
}

$csrf = (string)$_SESSION['csrf_omr_clave'];
$msg = '';
$err = '';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    try {
        $csrfPost = (string)($_POST['csrf_token'] ?? '');

        if (!hash_equals($csrf, $csrfPost)) {
            throw new RuntimeException('Solicitud no valida. Recarga la pagina.');
        }

        if (!$grupo) {
            throw new RuntimeException('Selecciona un grado valido.');
        }

        mysqli_begin_transaction($conn);

        $stmt = mysqli_prepare($conn, "
            INSERT INTO concurso_omr_claves
                (id_concurso, id_grupo, tipo, pregunta, respuesta_correcta, puntaje, created_at)
            VALUES
                (?, ?, ?, ?, ?, ?, NOW())
            ON DUPLICATE KEY UPDATE
                respuesta_correcta = VALUES(respuesta_correcta),
                puntaje = VALUES(puntaje),
                updated_at = NOW()
        ");

        if (!$stmt) {
            throw new RuntimeException('No se pudo preparar el guardado de claves.');
        }

        for ($i = 1; $i <= $totalPreguntas; $i++) {
            $respuesta = strtoupper(trim((string)($_POST['q' . $i] ?? '')));
            $puntaje = isset($_POST['p' . $i]) ? (float)$_POST['p' . $i] : 1.0;

            if (!in_array($respuesta, ['A', 'B', 'C', 'D'], true)) {
                throw new RuntimeException('Falta respuesta en la pregunta ' . $i . '.');
            }

            if ($puntaje <= 0) {
                $puntaje = 1.0;
            }

            mysqli_stmt_bind_param($stmt, 'iisisd', $idConcurso, $idGrupo, $tipo, $i, $respuesta, $puntaje);

            if (!mysqli_stmt_execute($stmt)) {
                throw new RuntimeException('No se pudo guardar la pregunta ' . $i . ': ' . mysqli_stmt_error($stmt));
            }
        }

        mysqli_stmt_close($stmt);
        mysqli_commit($conn);

        $_SESSION['csrf_omr_clave'] = bin2hex(random_bytes(32));
        $csrf = (string)$_SESSION['csrf_omr_clave'];
        $msg = 'Clave OMR guardada correctamente.';
    } catch (Throwable $e) {
        @mysqli_rollback($conn);
        $err = $e->getMessage();
    }
}

$clave = $grupo ? omr_clave($conn, $idConcurso, $idGrupo, $tipo) : [];

omr_page_header('Claves OMR', $ctx);
?>

<?php if ($msg !== ''): ?><div class="alert ok"><?php echo omr_h($msg); ?></div><?php endif; ?>
<?php if ($err !== ''): ?><div class="alert err"><?php echo omr_h($err); ?></div><?php endif; ?>

<div class="card">
    <form method="get" class="row">
        <input type="hidden" name="id_concurso" value="<?php echo $idConcurso; ?>">
        <div class="field">
            <label>Grado / grupo</label>
            <select name="id_grupo" onchange="this.form.submit()">
                <?php foreach ($grupos as $g): ?>
                    <option value="<?php echo (int)$g['id_grupo']; ?>" <?php echo (int)$g['id_grupo'] === $idGrupo ? 'selected' : ''; ?>>
                        <?php echo omr_h($g['nombre']); ?> - <?php echo omr_h($g['nivel']); ?>
                    </option>
                <?php endforeach; ?>
            </select>
        </div>
        <div class="field">
            <label>Tipo de prueba</label>
            <select name="tipo" onchange="this.form.submit()">
                <?php foreach (['A', 'B', 'C', 'D'] as $t): ?>
                    <option value="<?php echo $t; ?>" <?php echo $t === $tipo ? 'selected' : ''; ?>>Tipo <?php echo $t; ?></option>
                <?php endforeach; ?>
            </select>
        </div>
        <div>
            <button class="btn light" type="submit">Cargar</button>
        </div>
    </form>
</div>

<?php if (!$grupo): ?>
    <div class="alert err">No hay grados activos para este concurso.</div>
<?php else: ?>
    <form method="post" class="card">
        <input type="hidden" name="csrf_token" value="<?php echo omr_h($csrf); ?>">
        <input type="hidden" name="id_concurso" value="<?php echo $idConcurso; ?>">
        <input type="hidden" name="id_grupo" value="<?php echo $idGrupo; ?>">
        <input type="hidden" name="tipo" value="<?php echo omr_h($tipo); ?>">

        <h2 style="margin-top:0;">Respuestas correctas</h2>
        <p class="muted">
            Se guardan <?php echo $totalPreguntas; ?> preguntas para <?php echo omr_h($grupo['nombre']); ?>, tipo <?php echo omr_h($tipo); ?>.
            La ficha tiene 80 espacios, pero el sistema solo califica las preguntas configuradas para el grado.
        </p>

        <div class="answers">
            <?php for ($i = 1; $i <= $totalPreguntas; $i++): ?>
                <?php
                $respuesta = $clave[$i]['respuesta'] ?? '';
                $puntaje = $clave[$i]['puntaje'] ?? 1.00;
                ?>
                <div class="qbox">
                    <strong>P<?php echo $i; ?></strong>
                    <select name="q<?php echo $i; ?>" required>
                        <option value="">-</option>
                        <?php foreach (['A', 'B', 'C', 'D'] as $alt): ?>
                            <option value="<?php echo $alt; ?>" <?php echo $respuesta === $alt ? 'selected' : ''; ?>><?php echo $alt; ?></option>
                        <?php endforeach; ?>
                    </select>
                    <input type="number" step="0.01" min="0.01" name="p<?php echo $i; ?>" value="<?php echo omr_h(number_format((float)$puntaje, 2, '.', '')); ?>" style="margin-top:7px;">
                </div>
            <?php endfor; ?>
        </div>

        <p style="margin-top:18px;">
            <button class="btn" type="submit">Guardar clave</button>
            <a class="btn light" href="index.php?id_concurso=<?php echo $idConcurso; ?>">Volver</a>
        </p>
    </form>
<?php endif; ?>

<?php omr_page_footer(); ?>
