<?php
// ? Errores (quitar en producción)
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

// ? CORS
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");
header("Access-Control-Max-Age: 86400");

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

// ? Iniciar buffer de salida
ob_start();

// Forzar que mysqli lance excepciones en errores
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

function log_step($step) {
    error_log("OBTENER_HISTORIAL STEP: " . $step);
}

// Inicializar la respuesta por defecto
 $response = ['success' => false, 'message' => ''];

try {
    log_step("Script started.");

    // Incluir y verificar la conexión
    require_once(__DIR__ . '/../config.php');
    log_step("config.php included.");

    if (!isset($mysqli) || !$mysqli instanceof mysqli) {
        throw new Exception("Error crítico: No se pudo establecer la conexión a la base de datos.");
    }

    $mysqli->set_charset("utf8mb4");
    log_step("Charset set to utf8mb4.");

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

    if (isset($data->slug_tienda) && isset($data->credito_id)) {
        
        log_step("Validating input data.");
        $slug_tienda = $mysqli->real_escape_string($data->slug_tienda);
        $credito_id = (int)$data->credito_id;
        
        if ($credito_id <= 0) {
            throw new Exception("ID de crédito inválido.");
        }
        log_step("Input data validated.");
        
        // ? PASO DE SEGURIDAD: Verificar que el crédito existe y pertenece a la tienda
        log_step("Verifying credit ownership.");
        $query = "SELECT id FROM creditos WHERE id = ? AND slug_tienda = ?";
        $stmt = $mysqli->prepare($query);
        $stmt->bind_param("is", $credito_id, $slug_tienda);
        $stmt->execute();
        $result = $stmt->get_result();
        
        if ($result->num_rows === 0) {
            throw new Exception("El crédito especificado no existe o no pertenece a esta tienda.");
        }
        log_step("Credit ownership verified.");
        
        // Obtener el historial del crédito
        log_step("Fetching credit history.");
        $query_historial = "SELECT * FROM historial_crediticio WHERE credito_id = ? ORDER BY fecha_movimiento DESC";
        $stmt_historial = $mysqli->prepare($query_historial);
        $stmt_historial->bind_param("i", $credito_id);
        $stmt_historial->execute();
        $result_historial = $stmt_historial->get_result();
        
        $historial = [];
        while ($row = $result_historial->fetch_assoc()) {
            $historial[] = $row;
        }
        log_step("History fetched. Count: " . count($historial));
        
        // Preparar respuesta de éxito
        $response['success'] = true;
        $response['message'] = "Historial obtenido correctamente.";
        $response['historial'] = $historial;
        
    } else {
        log_step("ERROR: Missing required data.");
        throw new Exception("Faltan datos requeridos (slug_tienda, credito_id).");
    }

} catch (Throwable $e) {
    log_step("CATCH block activated. Error: " . $e->getMessage());
    
    // Limpiar el buffer de salida
    ob_clean();
    
    // Establecer código de respuesta de error
    http_response_code(500);
    
    // Asegurar que el content-type es JSON
    header('Content-Type: application/json');
    
    // Preparar y enviar la respuesta de error
    $response['message'] = $e->getMessage();
    
    echo json_encode($response);
    exit;
} finally {
    // Cerrar siempre la conexión
    log_step("FINALLY block: Closing connection.");
    if (isset($mysqli) && $mysqli) {
        $mysqli->close();
    }
}

// Si no hubo excepciones, limpiamos el buffer y enviamos la respuesta de éxito
ob_end_clean();
header('Content-Type: application/json');
echo json_encode($response);

log_step("Script finished successfully.");
?>