<?php
// ajax/tutorial.php — Endpoint de control del onboarding/tutorial guiado.
//
// op=marcar_visto       (POST)  — marca tutorial_visto=1 para el usuario en sesión
// op=reset              (POST)  — vuelve tutorial_visto=0 y limpia progreso
// op=guardar_progreso   (POST)  — guarda JSON corto del paso actual (param "progreso")
// op=estado             (GET)   — devuelve {tutorial_visto, tutorial_progreso}
//
// Nota de convención: el resto de endpoints AJAX del sistema NO usan
// http_response_code() para errores de negocio. Aquí se sigue esa misma
// convención: respuestas siempre 200, con ok=false en el body cuando aplica.

if (strlen(session_id()) < 1) {
    session_start();
}

header('Content-Type: application/json; charset=utf-8');

// La capa AJAX del sistema no suele validar sesión, pero tutorial.php sí
// la necesita para identificar al médico actual y no actualizar idusuario=0.
if (!isset($_SESSION["idusuario"])) {
    echo json_encode(["ok" => false, "error" => "sin_sesion"]);
    exit;
}

require_once "../modelos/Tutorial.php";
$tutorial  = new Tutorial();
$idusuario = (int)$_SESSION["idusuario"];

$op = isset($_GET["op"]) ? $_GET["op"] : "";

switch ($op) {
    case "marcar_visto":
        $ok = $tutorial->marcarVisto($idusuario);
        echo json_encode(["ok" => (bool)$ok]);
        break;

    case "reset":
        $ok = $tutorial->reset($idusuario);
        echo json_encode(["ok" => (bool)$ok]);
        break;

    case "guardar_progreso":
        // NOTA: no se aplica limpiarCadena() al progreso porque htmlspecialchars
        // corrompería el JSON ("..." -> "&quot;..."). La defensa contra inyección
        // está en updateTableRow() (sentencia preparada) + cast (int) del idusuario.
        $progreso = isset($_POST["progreso"]) ? (string)$_POST["progreso"] : "";
        $ok = $tutorial->guardarProgreso($idusuario, $progreso);
        echo json_encode(["ok" => (bool)$ok]);
        break;

    case "estado":
        echo json_encode($tutorial->estado($idusuario));
        break;

    default:
        echo json_encode(["ok" => false, "error" => "op_no_valida"]);
}
?>
