<?php
// ✅ Configurar sesión antes de session_start()
ini_set('session.gc_maxlifetime', 10800);
ini_set('session.cookie_lifetime', 10800);

session_set_cookie_params([
    'lifetime' => 10800,
    'path' => '/',
    'domain' => '',
    'secure' => false,
    'httponly' => true,
    'samesite' => 'Lax'
]);

session_start();

header('Content-Type: application/json');

// ✅ Validar sesión
if (!isset($_SESSION['usuario_id']) || !isset($_SESSION['token'])) {
    http_response_code(401);
    echo json_encode([
        'success' => false, 
        'message' => 'Sesión no válida o expirada. Inicie sesión nuevamente.'
    ]);
    exit;
}

// ✅ Actualizar timestamp de última actividad
$_SESSION['LAST_ACTIVITY'] = time();

// Obtener datos del JSON
$data = json_decode(file_get_contents('php://input'), true);

if (!isset($data['nota']) || !isset($data['incorrectas'])) {
    echo json_encode(['success' => false, 'message' => 'Datos incompletos']);
    exit;
}

$usuario_id = $_SESSION['usuario_id'];
$nota = max(0, min(100, intval($data['nota'])));
$fecha = date('Y-m-d H:i:s');
$incorrectas = implode(',', array_map('intval', $data['incorrectas']));

require 'conexion.php';

// ✅ Verificar que la conexión sea válida
if (!$conn || $conn->connect_error) {
    echo json_encode([
        'success' => false, 
        'message' => 'Error de conexión a la base de datos'
    ]);
    exit;
}

// ✅ Verificar token antes de guardar (seguridad adicional)
$usuario = $_SESSION['usuario'];
$tokenSesion = $_SESSION['token'];

$stmtToken = $conn->prepare("SELECT token FROM Usuarios WHERE usuario = ?");
$stmtToken->bind_param("s", $usuario);
$stmtToken->execute();
$resultToken = $stmtToken->get_result();

if ($resultToken->num_rows === 1) {
    $rowToken = $resultToken->fetch_assoc();
    
    if ($rowToken['token'] !== $tokenSesion) {
        $stmtToken->close();
        $conn->close();
        http_response_code(401);
        echo json_encode([
            'success' => false, 
            'message' => 'Token no válido. Sesión duplicada detectada.'
        ]);
        exit;
    }
} else {
    $stmtToken->close();
    $conn->close();
    http_response_code(401);
    echo json_encode([
        'success' => false, 
        'message' => 'Usuario no encontrado'
    ]);
    exit;
}

$stmtToken->close();

// ✅ Guardar resultado (mantiene tu estructura original)
$sql = "INSERT INTO Resultados (usuario_id, fecha, nota, incorrectas) VALUES (?, ?, ?, ?)";
$stmt = $conn->prepare($sql);

if (!$stmt) {
    echo json_encode([
        'success' => false, 
        'message' => 'Error al preparar consulta: ' . $conn->error
    ]);
    $conn->close();
    exit;
}

$stmt->bind_param("isis", $usuario_id, $fecha, $nota, $incorrectas);
$success = $stmt->execute();

if (!$success) {
    echo json_encode([
        'success' => false, 
        'message' => 'Error al guardar: ' . $stmt->error
    ]);
    $stmt->close();
    $conn->close();
    exit;
}

$stmt->close();
$conn->close();

echo json_encode([
    'success' => true, 
    'message' => 'Resultado guardado correctamente',
    'nota' => $nota,
    'incorrectas_count' => count($data['incorrectas'])
]);