<?php

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

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

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


require_once __DIR__ . '/vendor/autoload.php'; 
use Firebase\JWT\JWT;
use Firebase\JWT\Key;

 $jwt_key = "DAVID_NATHAN_256326565"; 


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


 $data = json_decode(file_get_contents("php://input"), true);

if (!isset($data['email'], $data['password'])) {
    echo json_encode(["success" => false, "message" => "Datos incompletos: se requiere email y password."]);
    exit;
}

 $email = trim($data['email']);
 $password = $data['password'];


 $sql = "
    SELECT 
        usu.ID_USUARIO, usu.NOMBRE_USUARIO, usu.APELLIDO_USUARIO,
        usu.CORREO_USUARIO, usu.TIPO_USUARIO, usu.ESTADO_USUARIO,
        usu.IMAGEN_USUARIO, tu.NOMBRE_TIPO AS NOMBRE_TIPO_USUARIO,
        usu.PASSWORD_USUARIO, usu.CODIGO_VERIFICACION
    FROM USUARIOS_SISTEMA usu
    INNER JOIN TIPO_USUARIO tu ON usu.TIPO_USUARIO = tu.ID_TIPO_USUARIO
    INNER JOIN TIPO_DOCUMENTOS td ON td.ID_DOCUMENTO = usu.TIPO_DOCUMENTO_USUARIO
    WHERE usu.CORREO_USUARIO = ?
";

 $stmt = $mysqli->prepare($sql);
if ($stmt === false) {
    echo json_encode(["success" => false, "message" => "Error al preparar la consulta: " . $mysqli->error]);
    exit;
}

 $stmt->bind_param("s", $email);
 $stmt->execute();
 $result = $stmt->get_result();

if ($row = $result->fetch_assoc()) {
    // ✅ Verificar la contraseña usando el campo de la BD
    if (password_verify($password, $row['PASSWORD_USUARIO'])) {
        
        // --- MAPEO DE DATOS ---
        // Creamos un nuevo array con nombres de variables descriptivos y diferentes a los de la BD.
        // Esto desacopla nuestra lógica de la estructura de la base de datos.
        $userData = [
            "userId"            => $row['ID_USUARIO'],
            "userName"          => $row['NOMBRE_USUARIO'],
            "userLastName"      => $row['APELLIDO_USUARIO'],
            "userEmail"         => $row['CORREO_USUARIO'],
            "userType"          => $row['TIPO_USUARIO'],
            "userStatus"        => $row['ESTADO_USUARIO'],
            "userImage"         => $row['IMAGEN_USUARIO'],
            "userTypeName"      => $row['NOMBRE_TIPO_USUARIO']
        ];
        
        $payload = [
            "iat" => time(),
            "exp" => time() + (60 * 60 * 24), // Expira en 24 horas
        ];
        $payload = array_merge($payload, $userData);

        $token = JWT::encode($payload, $jwt_key, 'HS256');

        echo json_encode([
            "success" => true,
            "message" => "Login exitoso",
            "token" => $token,
            "usuario" => $userData 
        ]);
    } else {
        echo json_encode(["success" => false, "message" => "Contraseña incorrecta"]);
    }
} else {
    echo json_encode(["success" => false, "message" => "Usuario no encontrado"]);
}

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