<?php
// api_corp/auth_estudiante.php
// POST { documento, password }
// Detecta si es USUARIO_SISTEMA o ESTUDIANTE y devuelve JWT con userType apropiado

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: Content-Type, Authorization");
header("Access-Control-Allow-Methods: POST, OPTIONS");
header("Content-Type: application/json; charset=utf-8");

if ($_SERVER["REQUEST_METHOD"] === "OPTIONS") { http_response_code(200); exit; }

ini_set('display_errors', 0);
error_reporting(E_ALL);

require_once(__DIR__ . "/config.php");

function ok($data = [], $message = "OK") {
    echo json_encode(array_merge(["success" => true, "message" => $message], $data)); exit;
}
function fail($message, $code = 400) {
    http_response_code($code);
    echo json_encode(["success" => false, "message" => $message]); exit;
}
function makeJWT($payload, $key) {
    $header    = base64_encode(json_encode(["typ" => "JWT", "alg" => "HS256"]));
    $payload   = base64_encode(json_encode($payload));
    $signature = base64_encode(hash_hmac("sha256", "$header.$payload", $key, true));
    return "$header.$payload.$signature";
}

if ($_SERVER["REQUEST_METHOD"] !== "POST") fail("Método no permitido.", 405);

$raw  = file_get_contents("php://input");
$body = json_decode($raw, true) ?: [];

$documento = trim($body["documento"] ?? "");
$password  = trim($body["password"]  ?? "");

if ($documento === "") fail("El documento es requerido.");
if ($password  === "") fail("La contraseña es requerida.");

$now = time();
$exp = $now + 86400; // 24h

// -- 1. Intentar login como USUARIO_SISTEMA (admin/docente) ----------------
$stAdmin = $mysqli->prepare("
    SELECT u.ID_USUARIO, u.NOMBRE_USUARIO, u.APELLIDO_USUARIO,
           u.CORREO_USUARIO, u.PASSWORD_USUARIO,
           u.TIPO_USUARIO, t.NOMBRE_TIPO, u.ESTADO_USUARIO
    FROM USUARIOS_SISTEMA u
    INNER JOIN TIPO_USUARIO t ON t.ID_TIPO_USUARIO = u.TIPO_USUARIO
    WHERE u.DOCUMENTO_USUARIO = ? LIMIT 1
");
if ($stAdmin) {
    $stAdmin->bind_param("s", $documento);
    $stAdmin->execute();
    $admin = $stAdmin->get_result()->fetch_assoc();
    if ($admin && password_verify($password, $admin["PASSWORD_USUARIO"])) {
        if ($admin["ESTADO_USUARIO"] != 1) fail("Usuario inactivo.");
        $token = makeJWT([
            "iat"          => $now,
            "exp"          => $exp,
            "userId"       => (int)$admin["ID_USUARIO"],
            "userName"     => $admin["NOMBRE_USUARIO"],
            "userLastName" => $admin["APELLIDO_USUARIO"],
            "userEmail"    => $admin["CORREO_USUARIO"],
            "userType"     => (int)$admin["TIPO_USUARIO"],
            "userTypeName" => $admin["NOMBRE_TIPO"],
            "userStatus"   => (int)$admin["ESTADO_USUARIO"],
            "userRole"     => "ADMIN",
        ], $JWT_KEY);
        ok(["token" => $token, "role" => "ADMIN", "redirect" => "/admin/dashboard"]);
    }
}

// -- 2. Intentar login como ESTUDIANTE -------------------------------------
$stEst = $mysqli->prepare("
    SELECT e.ID_ESTUDIANTE, e.NOMBRE_ESTUDIANTE, e.APELLIDO_ESTUDIANTE,
           e.DOCUMENTO_ESTUDIANTE, e.CORREO_ESTUDIANTE,
           e.ID_INSTITUCION, e.ESTADO_ESTUDIANTE,
           a.PASSWORD_HASH, a.DEBE_CAMBIAR_PASS
    FROM ESTUDIANTES e
    INNER JOIN ESTUDIANTES_AUTH a ON a.ID_ESTUDIANTE = e.ID_ESTUDIANTE
    WHERE e.DOCUMENTO_ESTUDIANTE = ? LIMIT 1
");
if (!$stEst) fail("Error interno.");
$stEst->bind_param("s", $documento);
$stEst->execute();
$est = $stEst->get_result()->fetch_assoc();

if (!$est)                                    fail("Credenciales incorrectas.", 401);
if (!password_verify($password, $est["PASSWORD_HASH"])) fail("Credenciales incorrectas.", 401);
if ($est["ESTADO_ESTUDIANTE"] != 1)           fail("Estudiante inactivo.", 403);

// Actualizar ultimo acceso
$mysqli->query("UPDATE ESTUDIANTES_AUTH SET ULTIMO_ACCESO = NOW() WHERE ID_ESTUDIANTE = " . (int)$est["ID_ESTUDIANTE"]);

$token = makeJWT([
    "iat"              => $now,
    "exp"              => $exp,
    "userId"           => (int)$est["ID_ESTUDIANTE"],
    "userName"         => $est["NOMBRE_ESTUDIANTE"],
    "userLastName"     => $est["APELLIDO_ESTUDIANTE"],
    "userEmail"        => $est["CORREO_ESTUDIANTE"],
    "idInstitucion"    => (int)$est["ID_INSTITUCION"],
    "userRole"         => "ESTUDIANTE",
    "debeCambiarPass"  => (bool)$est["DEBE_CAMBIAR_PASS"],
], $JWT_KEY);

ok([
    "token"           => $token,
    "role"            => "ESTUDIANTE",
    "debeCambiarPass" => (bool)$est["DEBE_CAMBIAR_PASS"],
    "redirect"        => "/estudiante/evaluaciones",
]);