<?php
// --- CONFIGURACIÓN DE LOG ---
 $log_file = __DIR__ . '/debug_log.txt';

function log_step($step) {
    global $log_file;
    $timestamp = date("Y-m-d H:i:s");
    $log_message = "[{$timestamp}] {$step}\n";
    file_put_contents($log_file, $log_message, FILE_APPEND | LOCK_EX);
}

// ? FUNCIÓN CLAVE: Fuerza la conversión a UTF-8 válido
function toUtf8($string) {
    // Asegurarse de que la extensión mbstring esté disponible
    if (!function_exists('mb_convert_encoding')) {
        // Si no está, usamos una alternativa más simple (menos precisa)
        return utf8_encode($string);
    }
    // mb_convert_encoding con 'auto' detecta la codificación original y la convierte a UTF-8
    // Es la forma más robusta de solucionar el problema.
    return mb_convert_encoding($string, 'UTF-8', 'auto');
}

// Limpiamos el log al inicio de cada petición
file_put_contents($log_file, "--- INICIO DE NUEVA PETICIÓN ---\n");

log_step("Script started. Logging to: " . $log_file);

// ? 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') {
    log_step("Método OPTIONS detectado. Enviando respuesta 200 y saliendo.");
    http_response_code(200);
    exit;
}

log_step("Método de la petición: " . $_SERVER['REQUEST_METHOD']);

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

// Inicializar la respuesta por defecto
 $response = ['success' => false, 'message' => toUtf8('Error desconocido.')];

try {
    log_step("Intentando incluir config.php...");
    require_once(__DIR__ . '/../config.php');
    log_step("config.php incluido correctamente.");

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

    $mysqli->set_charset("utf8mb4");
    log_step("Charset de la BD establecido a utf8mb4.");

    $raw_post_data = file_get_contents("php://input");
    log_step("Datos crudos recibidos (php://input): " . $raw_post_data);
    
    $data = json_decode($raw_post_data);

    if (isset($data->slug_tienda) && isset($data->credito_id)) {
        log_step("Datos de entrada válidos (slug_tienda, credito_id).");
        $slug_tienda = $mysqli->real_escape_string($data->slug_tienda);
        $credito_id = (int)$data->credito_id;
        
        if ($credito_id <= 0) {
            throw new Exception(toUtf8("ID de crédito inválido (debe ser mayor que 0)."));
        }
        log_step("Datos procesados: slug_tienda={$slug_tienda}, credito_id={$credito_id}");

        // --- LÓGICA DE VALIDACIÓN ---
        $check_abonos_sql = "SELECT COUNT(*) AS total_abonos FROM abonos_creditos WHERE credito_id = ?";
        $stmt_check = $mysqli->prepare($check_abonos_sql);
        $stmt_check->bind_param("i", $credito_id);
        $stmt_check->execute();
        $result = $stmt_check->get_result();
        $row = $result->fetch_assoc();
        $stmt_check->close();

        $total_abonos = (int)$row['total_abonos'];
        log_step("Resultado de la consulta: total_abonos = " . $total_abonos);

        if ($total_abonos > 0) {
            log_step("VALIDACIÓN FALLIDA: El crédito tiene {$total_abonos} abonos. Bloqueando anulación.");
            $response['success'] = false;
            // ? USAMOS LA FUNCIÓN toUtf8() EN EL MENSAJE
            $response['message'] = toUtf8("No se puede anular el credito porque ya tiene pagos registrados.");
        } else {
            log_step("VALIDACIÓN EXITOSA: El crédito no tiene abonos. Permitiendo anulación.");
            $response['success'] = true;
            // ? USAMOS LA FUNCIÓN toUtf8() EN EL MENSAJE
            $response['message'] = toUtf8("El credito es elegible para anulación.");
        }

    } else {
        log_step("ERROR: Faltan datos requeridos en el JSON de entrada (slug_tienda, credito_id).");
        // ? USAMOS LA FUNCIÓN toUtf8() EN EL MENSAJE
        $response['message'] = toUtf8("Faltan datos requeridos (slug_tienda, credito_id).");
    }

} catch (Throwable $e) {
    log_step("EXCEPCIÓN CAPTURADA: " . $e->getMessage());
    http_response_code(500);
    // ? USAMOS LA FUNCIÓN toUtf8() EN EL MENSAJE
    $response['message'] = toUtf8("Error en el proceso de validación: ") . $e->getMessage();
} finally {
    if (isset($mysqli) && $mysqli) {
        $mysqli->close();
        log_step("Conexión a la BD cerrada.");
    }
}

// --- ENVÍO DE LA RESPUESTA ---
log_step("Contenido del array \$response antes de codificar: " . print_r($response, true));

 $json_response = json_encode($response);

// Comprobar si json_encode falló
if (json_last_error() !== JSON_ERROR_NONE) {
    log_step("ERROR CRÍTICO: json_encode() ha fallado. Error: " . json_last_error_msg());
    // Enviar una respuesta de error manual y segura (sin caracteres problemáticos)
    http_response_code(500);
    echo '{"success":false,"message":"Error interno del servidor al codificar la respuesta."}';
    exit;
}

log_step("RESPUESTA FINAL A ENVIAR: " . $json_response);
echo $json_response;

log_step("--- FIN DE LA PETICIÓN ---\n");
?>