<?php
// Test script para verificar los cálculos forestales
require_once 'api/config/database.php';
require_once 'api/utils/ForestCalculations.php';
require_once 'api/controllers/ReportController.php';

echo "=== PRUEBA DE CÁLCULOS FORESTALES ===\n\n";

// Datos de prueba simulados
$registrosPrueba = [
    [
        'dap_cm' => 25.5,
        'altura_m' => 15.2,
        'especie' => 'Pinus maximinoi',
        'condicion_arbol' => 'Sano',
        'numero_parcela' => 1,
        'fecha_captura' => '2024-01-15'
    ],
    [
        'dap_cm' => 32.1,
        'altura_m' => 18.7,
        'especie' => 'Cupressus lusitanica',
        'condicion_arbol' => 'Sano',
        'numero_parcela' => 1,
        'fecha_captura' => '2024-01-15'
    ],
    [
        'dap_cm' => 28.3,
        'altura_m' => 16.5,
        'especie' => 'Pinus maximinoi',
        'condicion_arbol' => 'Bifurcado',
        'numero_parcela' => 2,
        'fecha_captura' => '2024-01-15'
    ],
    [
        'dap_cm' => 45.2,
        'altura_m' => 22.1,
        'especie' => 'Quercus sp.',
        'condicion_arbol' => 'Sano',
        'numero_parcela' => 2,
        'fecha_captura' => '2024-01-15'
    ],
    [
        'dap_cm' => 19.8,
        'altura_m' => 12.3,
        'especie' => 'Pinus maximinoi',
        'condicion_arbol' => 'Sano',
        'numero_parcela' => 3,
        'fecha_captura' => '2024-01-15'
    ]
];

$areaRodal = 2.5; // hectáreas

echo "Datos de prueba:\n";
echo "- Número de árboles: " . count($registrosPrueba) . "\n";
echo "- Área del rodal: {$areaRodal} ha\n\n";

// Probar cálculos individuales
echo "=== CÁLCULOS INDIVIDUALES ===\n";

$conteo = ForestCalculations::contarArboles($registrosPrueba);
echo "1. Conteo de árboles: {$conteo}\n";

$dapPromedio = ForestCalculations::calcularDAPPromedio($registrosPrueba);
echo "2. DAP promedio: {$dapPromedio} cm\n";

$alturaPromedio = ForestCalculations::calcularAlturaPromedio($registrosPrueba);
echo "3. Altura promedio: {$alturaPromedio} m\n";

$areaBasal = ForestCalculations::calcularAreaBasal($registrosPrueba, $areaRodal);
echo "4. Área basal: {$areaBasal} m²/ha\n";

$volumen = ForestCalculations::calcularVolumen($registrosPrueba, $areaRodal);
echo "5. Volumen: {$volumen} m³/ha\n\n";

// Probar cálculos completos
echo "=== CÁLCULOS COMPLETOS ===\n";
$metricasCompletas = ForestCalculations::calcularMetricasCompletas($registrosPrueba, $areaRodal);

echo "Métricas completas:\n";
foreach ($metricasCompletas as $metrica => $valor) {
    echo "- {$metrica}: {$valor}\n";
}

echo "\n=== GENERACIÓN DE DATOS CSV ===\n";

// Datos simulados para CSV
$rodalInfo = [
    'nombre_rodal' => 'Rodal de Prueba 1',
    'area_ha' => $areaRodal
];

$proyectoInfo = [
    'nombre_proyecto' => 'Proyecto de Prueba',
    'nombre_finca' => 'Finca El Bosque',
    'departamento' => 'Guatemala',
    'municipio' => 'Guatemala',
    'nombre_propietario' => 'Juan Pérez',
    'nombre_regente_forestal' => 'Ing. María González'
];

$datosCSV = ForestCalculations::generarDatosCSV($registrosPrueba, $rodalInfo, $proyectoInfo);

echo "Datos CSV generados: " . count($datosCSV) . " filas\n";
echo "Primeras 10 filas:\n";
for ($i = 0; $i < min(10, count($datosCSV)); $i++) {
    echo ($i + 1) . ". " . implode(' | ', $datosCSV[$i]) . "\n";
}

echo "\n=== VERIFICACIÓN DE FÓRMULAS ===\n";

// Verificar cálculo manual del área basal
$areaBasalManual = 0;
foreach ($registrosPrueba as $registro) {
    $radio = $registro['dap_cm'] / 2 / 100; // convertir a metros
    $areaBasalArbol = pi() * pow($radio, 2);
    $areaBasalManual += $areaBasalArbol;
    echo "Árbol DAP {$registro['dap_cm']} cm -> Área basal: " . round($areaBasalArbol, 6) . " m²\n";
}
$areaBasalManualPorHa = round($areaBasalManual / $areaRodal, 2);
echo "Área basal total manual: {$areaBasalManualPorHa} m²/ha\n";
echo "Área basal calculada: {$areaBasal} m²/ha\n";
echo "¿Coinciden? " . ($areaBasalManualPorHa == $areaBasal ? "SÍ" : "NO") . "\n\n";

// Verificar cálculo manual del volumen
$volumenManual = 0;
foreach ($registrosPrueba as $registro) {
    $areaBasalArbol = pi() * pow(($registro['dap_cm'] / 2 / 100), 2);
    $volumenArbol = $areaBasalArbol * $registro['altura_m'] * 0.7; // Factor de forma
    $volumenManual += $volumenArbol;
    echo "Árbol DAP {$registro['dap_cm']} cm, Altura {$registro['altura_m']} m -> Volumen: " . round($volumenArbol, 6) . " m³\n";
}
$volumenManualPorHa = round($volumenManual / $areaRodal, 2);
echo "Volumen total manual: {$volumenManualPorHa} m³/ha\n";
echo "Volumen calculado: {$volumen} m³/ha\n";
echo "¿Coinciden? " . ($volumenManualPorHa == $volumen ? "SÍ" : "NO") . "\n\n";

echo "=== PRUEBA COMPLETADA ===\n";
echo "Todas las funciones de cálculo forestal han sido probadas.\n";
echo "Verifique que los resultados sean coherentes con las fórmulas forestales estándar.\n";
?>