<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');

require_once __DIR__ . '/../../config/bootstrap.php';
require_once __DIR__ . '/../../includes/get-fallback-user.php';

use App\Services\AuthService;
use App\Services\ContractService;
use App\Services\SecurityService;

echo "<!DOCTYPE html><html><head><title>Test Proceso Crear Contrato</title></head><body>";
echo "<h1>Test: Proceso de Creacion de Contrato</h1>";
echo "<pre style='background:#f5f5f5; padding:20px; border:1px solid #ddd;'>";

$paso = 1;
function logPaso($numero, $texto, $success = true) {
    $icon = $success ? "OK" : "ERROR";
    echo "[$icon] Paso $numero: $texto\n";
}

function logError($mensaje) {
    echo "\n--- ERROR ---\n";
    echo htmlspecialchars($mensaje);
    echo "\n-------------\n";
}

try {
    // PASO 1: Bootstrap ya cargado
    logPaso($paso++, "Bootstrap cargado", true);

    // PASO 3: Crear servicios
    logPaso($paso++, "Creando servicios...");
    $auth = new AuthService();
    logPaso($paso++, "AuthService creado", true);

    $contractService = new ContractService();
    logPaso($paso++, "ContractService creado", true);

    $security = new SecurityService();
    logPaso($paso++, "SecurityService creado", true);

    // PASO 4: Obtener usuario
    logPaso($paso++, "Obteniendo usuario...");
    $user = $auth->user();
    if (!$user && ($_ENV['APP_ENV'] ?? 'production') === 'development') {
        echo "   Usando fallback user (solo development)\n";
        $user = getFallbackUser();
    }
    if ($user) {
        echo "   Usuario ID: {$user['id']}, Nombre: {$user['nombre']}, Rol: {$user['rol']}\n";
        logPaso($paso++, "Usuario obtenido OK", true);
    } else {
        logPaso($paso++, "No hay sesión activa - requiere login", false);
        throw new Exception("Requiere autenticación válida");
    }

    // PASO 5: Preparar datos de prueba
    logPaso($paso++, "Preparando datos de prueba...");
    $data = [
        'admin_id'         => $user['id'],
        'titulo'           => 'TEST - Contrato desde Hosting',
        'contenido'        => '<p>Este es un contrato de prueba creado desde el hosting.</p>',
        'logo_path'        => null,
        'cliente_nombre'   => 'Juan Pérez Test',
        'cliente_email'    => 'test@ejemplo.com',
        'cliente_telefono' => '573001234567',
        'expiration_hours' => 24,
        'company_name'     => null,
        'company_nit'      => null,
        'company_address'  => null,
        'company_phone'    => null,
        'company_email'    => null,
        'company_website'  => null,
        'company_city'     => null
    ];
    echo "   Datos preparados:\n";
    foreach ($data as $key => $value) {
        if ($value !== null) {
            echo "     - $key: " . (is_string($value) && strlen($value) > 50 ? substr($value, 0, 50) . '...' : $value) . "\n";
        }
    }
    logPaso($paso++, "Datos de prueba listos", true);

    // PASO 6: Intentar crear contrato
    echo "\n";
    logPaso($paso++, "INTENTANDO CREAR CONTRATO...");
    echo "   Llamando a contractService->create()...\n";

    $result = $contractService->create($data);

    echo "   Resultado recibido\n";
    logPaso($paso++, "create() ejecutado sin excepciones", true);

    // PASO 7: Verificar resultado
    echo "\n=== RESULTADO ===\n";
    echo "Success: " . ($result['success'] ? 'true' : 'false') . "\n";
    echo "Message: " . ($result['message'] ?? 'N/A') . "\n";

    if ($result['success']) {
        echo "Contract ID: " . ($result['contract_id'] ?? 'N/A') . "\n";
        echo "\n";
        logPaso($paso++, "¡CONTRATO CREADO EXITOSAMENTE!", true);
        echo "\n--- EXITO ---\n";
        echo "ID del contrato: " . $result['contract_id'] . "\n";
        echo "Ver en: ver-contrato.php?id={$result['contract_id']}\n";
        echo "-------------\n";
    } else {
        logPaso($paso++, "create() retornó success=false", false);
        echo "\n========================================\n";
        echo "ERROR EN LA CREACION\n";
        echo "========================================\n";
        echo "Mensaje: " . $result['message'] . "\n";

        if (isset($result['error_detail'])) {
            echo "\nDetalles del Error:\n";
            echo "Archivo: " . $result['error_detail']['file'] . "\n";
            echo "Linea: " . $result['error_detail']['line'] . "\n";
            echo "----------------------------------------\n";
            echo "Stack Trace:\n" . $result['error_detail']['trace'] . "\n";
        }
        echo "========================================\n";
    }

} catch (Exception $e) {
    logPaso($paso++, "EXCEPCION CAPTURADA", false);
    echo "\n========================================\n";
    echo "EXCEPCION\n";
    echo "========================================\n";
    echo "Mensaje: " . htmlspecialchars($e->getMessage()) . "\n";
    echo "Archivo: " . htmlspecialchars($e->getFile()) . "\n";
    echo "Linea: " . $e->getLine() . "\n";
    echo "----------------------------------------\n";
    echo "Stack Trace:\n";
    echo htmlspecialchars($e->getTraceAsString());
    echo "\n========================================\n";
}

echo "\n=== FIN DEL TEST ===\n";
echo "</pre>";
echo "<hr>";
echo "<p><a href='crear-contrato.php'>Volver a Crear Contrato</a> | ";
echo "<a href='dashboard.php'>Dashboard</a></p>";
echo "</body></html>";
?>
