<?php
// Test script para verificar los endpoints de reportes y cálculos
// Este script debe ejecutarse en un servidor con PHP y MySQL configurado

echo "=== PRUEBA DE API DE REPORTES Y CÁLCULOS ===\n\n";

// Configuración de prueba
$baseUrl = 'http://localhost/api'; // Cambiar según tu configuración
$testRodalId = 1; // ID de rodal existente para pruebas
$testProjectId = 1; // ID de proyecto existente para pruebas

// Headers para las peticiones
$headers = [
    'Content-Type: application/json',
    'Authorization: Bearer YOUR_JWT_TOKEN_HERE' // Reemplazar con token válido
];

echo "Configuración de prueba:\n";
echo "- Base URL: {$baseUrl}\n";
echo "- Rodal ID: {$testRodalId}\n";
echo "- Proyecto ID: {$testProjectId}\n\n";

// 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_HTTPHEADER, $headers);
    
    if ($method === 'POST') {
        curl_setopt($ch, CURLOPT_POST, true);
        if ($data) {
            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' => $response
    ];
}

// Test 1: Obtener cálculos de un rodal
echo "=== TEST 1: GET /rodales/{id}/calculations ===\n";
$url = "{$baseUrl}/rodales/{$testRodalId}/calculations";
$response = makeRequest($url, 'GET', null, $headers);

echo "URL: {$url}\n";
echo "Código HTTP: {$response['code']}\n";
echo "Respuesta: " . substr($response['body'], 0, 200) . "...\n\n";

if ($response['code'] === 200) {
    $data = json_decode($response['body'], true);
    if ($data) {
        echo "Métricas obtenidas:\n";
        if (isset($data['metricas'])) {
            foreach ($data['metricas'] as $metrica => $valor) {
                echo "- {$metrica}: {$valor}\n";
            }
        }
    }
}

echo "\n";

// Test 2: Exportar rodal a CSV
echo "=== TEST 2: GET /rodales/{id}/export-csv ===\n";
$url = "{$baseUrl}/rodales/{$testRodalId}/export-csv";
$response = makeRequest($url, 'GET', null, $headers);

echo "URL: {$url}\n";
echo "Código HTTP: {$response['code']}\n";
echo "Tipo de contenido esperado: CSV\n";
echo "Tamaño de respuesta: " . strlen($response['body']) . " bytes\n\n";

if ($response['code'] === 200) {
    echo "Primeras líneas del CSV:\n";
    $lines = explode("\n", $response['body']);
    for ($i = 0; $i < min(5, count($lines)); $i++) {
        echo ($i + 1) . ". " . $lines[$i] . "\n";
    }
}

echo "\n";

// Test 3: Obtener resumen del proyecto
echo "=== TEST 3: GET /projects/{id}/summary ===\n";
$url = "{$baseUrl}/projects/{$testProjectId}/summary";
$response = makeRequest($url, 'GET', null, $headers);

echo "URL: {$url}\n";
echo "Código HTTP: {$response['code']}\n";
echo "Respuesta: " . substr($response['body'], 0, 300) . "...\n\n";

if ($response['code'] === 200) {
    $data = json_decode($response['body'], true);
    if ($data) {
        echo "Resumen del proyecto:\n";
        if (isset($data['totales_proyecto'])) {
            foreach ($data['totales_proyecto'] as $total => $valor) {
                echo "- {$total}: {$valor}\n";
            }
        }
        if (isset($data['total_rodales'])) {
            echo "- Total de rodales: {$data['total_rodales']}\n";
        }
    }
}

echo "\n";

// Test 4: Actualizar cálculos
echo "=== TEST 4: POST /calculations/refresh/{rodalId} ===\n";
$url = "{$baseUrl}/calculations/refresh/{$testRodalId}";
$response = makeRequest($url, 'POST', null, $headers);

echo "URL: {$url}\n";
echo "Código HTTP: {$response['code']}\n";
echo "Respuesta: " . substr($response['body'], 0, 200) . "...\n\n";

// Test de errores
echo "=== TEST DE ERRORES ===\n";

// Test con rodal inexistente
echo "Test con rodal inexistente (ID: 99999):\n";
$url = "{$baseUrl}/rodales/99999/calculations";
$response = makeRequest($url, 'GET', null, $headers);
echo "Código HTTP: {$response['code']} (esperado: 404)\n";
echo "Respuesta: {$response['body']}\n\n";

// Test sin autenticación
echo "Test sin token de autenticación:\n";
$url = "{$baseUrl}/rodales/{$testRodalId}/calculations";
$response = makeRequest($url, 'GET', null, ['Content-Type: application/json']);
echo "Código HTTP: {$response['code']} (esperado: 401)\n";
echo "Respuesta: {$response['body']}\n\n";

echo "=== INSTRUCCIONES PARA EJECUTAR ===\n";
echo "1. Asegúrate de tener un servidor web con PHP y MySQL funcionando\n";
echo "2. Configura la base de datos con datos de prueba\n";
echo "3. Obtén un token JWT válido y reemplázalo en el script\n";
echo "4. Ajusta los IDs de rodal y proyecto según tu base de datos\n";
echo "5. Ejecuta: php test_reports_api.php\n\n";

echo "=== ENDPOINTS IMPLEMENTADOS ===\n";
echo "✓ GET /rodales/{id}/calculations - Obtener cálculos forestales\n";
echo "✓ GET /rodales/{id}/export-csv - Exportar datos a CSV\n";
echo "✓ GET /projects/{id}/summary - Resumen completo del proyecto\n";
echo "✓ POST /calculations/refresh/{rodalId} - Actualizar cálculos\n\n";

echo "=== PRUEBA COMPLETADA ===\n";
?>