<?php
// verify_code.php

// ? Errores (quitar en produccion)
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

// ? CORS y Headers
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: Content-Type");
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;
}

// ? Conexi�n y Autoloader
require_once(__DIR__ . '/config.php');
require_once(__DIR__ . '/vendor/autoload.php');

use Firebase\JWT\JWT;
use Firebase\JWT\Key;

 $jwt_key = "DavoNathan20251088Life"; // Usa una clave segura y gu�rdala bien
 $mysqli->set_charset("utf8mb4");

// ? JSON y Validaci�n de Entrada
 $input = json_decode(file_get_contents('php://input'), true);
if (!$input) {
    echo json_encode(['success' => false, 'message' => 'JSON inv�lido.']);
    exit;
}

 $email = isset($input['email']) ? trim($input['email']) : '';
 $code = isset($input['code']) ? trim($input['code']) : '';

if (empty($email) || empty($code)) {
    echo json_encode(['success' => false, 'message' => 'El correo y el c�digo son obligatorios.']);
    exit;
}

try {
    // 1. Buscar usuario y el c�digo hasheado
    $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.CODIGO_VERIFICACION
        FROM USUARIOS_SISTEMA usu
        INNER JOIN TIPO_USUARIO tu ON usu.TIPO_USUARIO = tu.ID_TIPO_USUARIO
        WHERE usu.CORREO_USUARIO = ?
    ";
    $stmt = $mysqli->prepare($sql);
    $stmt->bind_param("s", $email);
    $stmt->execute();
    $result = $stmt->get_result();

    if ($row = $result->fetch_assoc()) {
        // 2. Verificar el c�digo
        if (password_verify($code, $row['CODIGO_VERIFICACION'])) {
            // 3. Si el c�digo es correcto, generar el JWT
            $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),
            ];
            $payload = array_merge($payload, $userData);

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

            // 4. (Opcional pero recomendado) Limpiar el c�digo de verificaci�n de la BD para que no se reutilice
            $stmt_clear = $mysqli->prepare("UPDATE USUARIOS_SISTEMA SET CODIGO_VERIFICACION = NULL WHERE ID_USUARIO = ?");
            $stmt_clear->bind_param("i", $row['ID_USUARIO']);
            $stmt_clear->execute();

            echo json_encode([
                "success" => true,
                "message" => "Login exitoso",
                "token" => $token,
                "usuario" => $userData
            ]);
        } else {
            echo json_encode(["success" => false, "message" => "C�digo de verificaci�n incorrecto o ha expirado."]);
        }
    } else {
        echo json_encode(["success" => false, "message" => "Usuario no encontrado."]);
    }
} catch (Exception $e) {
    http_response_code(500);
    echo json_encode(['success' => false, 'message' => $e->getMessage()]);
} finally {
    if (isset($mysqli) && $mysqli) {
        $mysqli->close();
    }
}