<?php
/**
 * Script de prueba para la API de Proyectos
 * Ejecutar desde línea de comandos: php test_projects_api.php
 */

// Configuración
$baseUrl = 'http://localhost/api';
$testEmail = 'admin@test.com';
$testPassword = 'admin123';

// Función para hacer peticiones HTTP
function makeRequest($url, $method = 'GET', $data = null, $headers = []) {
    $ch = curl_init();
    
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    
    if ($data && in_array($method, ['POST', 'PUT'])) {
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
    }
    
    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    
    return [
        'code' => $httpCode,
        'body' => json_decode($response, true)
    ];
}

echo "=== PRUEBAS DE API DE PROYECTOS ===\n\n";

// 1. Obtener token de autenticación
echo "1. Autenticando usuario...\n";
$loginResponse = makeRequest("$baseUrl/auth/login", 'POST', [
    'email' => $testEmail,
    'password' => $testPassword
], ['Content-Type: application/json']);

if ($loginResponse['code'] !== 200 || !isset($loginResponse['body']['data']['token'])) {
    echo "❌ Error en autenticación: " . json_encode($loginResponse['body']) . "\n";
    exit(1);
}

$token = $loginResponse['body']['data']['token'];
$authHeaders = [
    'Content-Type: application/json',
    'Authorization: Bearer ' . $token
];

echo "✅ Autenticación exitosa\n\n";

// 2. Obtener lista de departamentos
echo "2. Obteniendo departamentos de Guatemala...\n";
$deptResponse = makeRequest("$baseUrl/projects/departments", 'GET', null, $authHeaders);

if ($deptResponse['code'] === 200) {
    echo "✅ Departamentos obtenidos: " . count($deptResponse['body']['data']) . " departamentos\n";
    echo "   Primeros 3: " . implode(', ', array_slice($deptResponse['body']['data'], 0, 3)) . "\n\n";
} else {
    echo "❌ Error obteniendo departamentos: " . json_encode($deptResponse['body']) . "\n\n";
}

// 3. Crear nuevo proyecto
echo "3. Creando nuevo proyecto de prueba...\n";
$projectData = [
    'nombre_proyecto' => 'Proyecto Test API ' . date('Y-m-d H:i:s'),
    'nombre_finca' => 'Finca de Prueba',
    'departamento' => 'Guatemala',
    'municipio' => 'Guatemala',
    'aldea' => 'Aldea Central',
    'nombre_propietario' => 'Juan Pérez',
    'nombre_regente_forestal' => 'María González'
];

$createResponse = makeRequest("$baseUrl/projects", 'POST', $projectData, $authHeaders);

if ($createResponse['code'] === 201) {
    $projectId = $createResponse['body']['data']['id'];
    echo "✅ Proyecto creado exitosamente con ID: $projectId\n\n";
} else {
    echo "❌ Error creando proyecto: " . json_encode($createResponse['body']) . "\n\n";
    $projectId = null;
}

// 4. Obtener lista de proyectos
echo "4. Obteniendo lista de proyectos...\n";
$listResponse = makeRequest("$baseUrl/projects", 'GET', null, $authHeaders);

if ($listResponse['code'] === 200) {
    $totalProjects = $listResponse['body']['total'];
    echo "✅ Lista obtenida: $totalProjects proyectos encontrados\n\n";
} else {
    echo "❌ Error obteniendo lista: " . json_encode($listResponse['body']) . "\n\n";
}

// 5. Obtener proyecto específico (si se creó)
if ($projectId) {
    echo "5. Obteniendo detalles del proyecto creado...\n";
    $showResponse = makeRequest("$baseUrl/projects/$projectId", 'GET', null, $authHeaders);
    
    if ($showResponse['code'] === 200) {
        $project = $showResponse['body']['data'];
        echo "✅ Proyecto obtenido: {$project['nombre_proyecto']}\n";
        echo "   Estadísticas: {$project['estadisticas']['total_rodales']} rodales, ";
        echo "{$project['estadisticas']['area_total_ha']} ha\n\n";
    } else {
        echo "❌ Error obteniendo proyecto: " . json_encode($showResponse['body']) . "\n\n";
    }
}

// 6. Actualizar proyecto (si se creó)
if ($projectId) {
    echo "6. Actualizando proyecto...\n";
    $updateData = [
        'nombre_proyecto' => 'Proyecto Test API Actualizado ' . date('H:i:s'),
        'municipio' => 'Mixco'
    ];
    
    $updateResponse = makeRequest("$baseUrl/projects/$projectId", 'PUT', $updateData, $authHeaders);
    
    if ($updateResponse['code'] === 200) {
        echo "✅ Proyecto actualizado exitosamente\n\n";
    } else {
        echo "❌ Error actualizando proyecto: " . json_encode($updateResponse['body']) . "\n\n";
    }
}

// 7. Probar validaciones
echo "7. Probando validaciones...\n";
$invalidData = [
    'nombre_proyecto' => '', // Vacío - debe fallar
    'nombre_finca' => 'Test',
    'departamento' => 'Departamento Inexistente', // No válido
    'municipio' => 'Test',
    'aldea' => 'Test',
    'nombre_propietario' => 'T', // Muy corto
    'nombre_regente_forestal' => 'Test'
];

$validationResponse = makeRequest("$baseUrl/projects", 'POST', $invalidData, $authHeaders);

if ($validationResponse['code'] === 400) {
    echo "✅ Validaciones funcionando correctamente\n";
    echo "   Errores detectados: " . count($validationResponse['body']['errors']) . "\n\n";
} else {
    echo "❌ Las validaciones no están funcionando correctamente\n\n";
}

// 8. Probar filtros
echo "8. Probando filtros de búsqueda...\n";
$filterResponse = makeRequest("$baseUrl/projects?departamento=Guatemala", 'GET', null, $authHeaders);

if ($filterResponse['code'] === 200) {
    echo "✅ Filtros funcionando: " . $filterResponse['body']['total'] . " proyectos en Guatemala\n\n";
} else {
    echo "❌ Error con filtros: " . json_encode($filterResponse['body']) . "\n\n";
}

// 9. Eliminar proyecto de prueba (si se creó)
if ($projectId) {
    echo "9. Eliminando proyecto de prueba...\n";
    $deleteResponse = makeRequest("$baseUrl/projects/$projectId", 'DELETE', null, $authHeaders);
    
    if ($deleteResponse['code'] === 200) {
        echo "✅ Proyecto eliminado exitosamente\n\n";
    } else {
        echo "❌ Error eliminando proyecto: " . json_encode($deleteResponse['body']) . "\n\n";
    }
}

// 10. Probar endpoint no autorizado
echo "10. Probando acceso sin autenticación...\n";
$unauthorizedResponse = makeRequest("$baseUrl/projects", 'GET');

if ($unauthorizedResponse['code'] === 401) {
    echo "✅ Protección de autenticación funcionando correctamente\n\n";
} else {
    echo "❌ La protección de autenticación no está funcionando\n\n";
}

echo "=== PRUEBAS COMPLETADAS ===\n";
echo "Todas las funcionalidades principales de la API de Proyectos han sido probadas.\n";
?>