<?php

require_once __DIR__ . '/../controllers/ReportController.php';
require_once __DIR__ . '/../middleware/AuthMiddleware.php';
require_once __DIR__ . '/../middleware/RoleMiddleware.php';

// Crear instancia del controlador
$reportController = new ReportController();

// Obtener el método HTTP y la ruta
$method = $_SERVER['REQUEST_METHOD'];
$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);

// Remover el prefijo /api de la ruta
$path = str_replace('/api', '', $path);

// Verificar autenticación para todas las rutas de reportes
AuthMiddleware::authenticate();

// Verificar que el usuario tenga permisos (Administrador o Regente)
RoleMiddleware::checkRole(['Administrador', 'Regente']);

switch ($method) {
    case 'GET':
        // GET /rodales/{id}/calculations
        if (preg_match('/^\/rodales\/(\d+)\/calculations$/', $path, $matches)) {
            $rodalId = $matches[1];
            $reportController->getCalculationsByRodal($rodalId);
        }
        // GET /rodales/{id}/export-csv
        elseif (preg_match('/^\/rodales\/(\d+)\/export-csv$/', $path, $matches)) {
            $rodalId = $matches[1];
            $reportController->exportRodalToCSV($rodalId);
        }
        // GET /projects/{id}/summary
        elseif (preg_match('/^\/projects\/(\d+)\/summary$/', $path, $matches)) {
            $projectId = $matches[1];
            $reportController->getProjectSummary($projectId);
        }
        else {
            http_response_code(404);
            echo json_encode(['error' => 'Endpoint no encontrado']);
        }
        break;
        
    case 'POST':
        // POST /calculations/refresh/{rodalId}
        if (preg_match('/^\/calculations\/refresh\/(\d+)$/', $path, $matches)) {
            $rodalId = $matches[1];
            $reportController->refreshCalculations($rodalId);
        }
        else {
            http_response_code(404);
            echo json_encode(['error' => 'Endpoint no encontrado']);
        }
        break;
        
    default:
        http_response_code(405);
        echo json_encode(['error' => 'Método no permitido']);
        break;
}