<?php

require_once __DIR__ . '/../../config/bootstrap.php';

use ControleFrotas\Config\Database;
use ControleFrotas\Utils\Response;
use ControleFrotas\Utils\Logger;

header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type, Authorization');

// Handle preflight OPTIONS request
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    http_response_code(200);
    exit();
}

// Verificar autenticação
$user = requireRole('Administrador', 'Supervisor');

if ($_SERVER['REQUEST_METHOD'] === 'GET') {
    obterOpcoesParaFiltros();
} else {
    Response::error('Método não permitido', 405);
}

function obterOpcoesParaFiltros(): void {
    try {
        $opcoes = [
            'tecnicos' => obterTecnicos(),
            'veiculos' => obterVeiculos(),
            'periodos' => obterPeriodosPredefinidos(),
            'agrupamentos' => obterTiposAgrupamento()
        ];

        Response::success($opcoes);

    } catch (Exception $e) {
        Logger::error('Erro ao obter opções para filtros', [
            'error' => $e->getMessage(),
            'trace' => $e->getTraceAsString()
        ]);
        Response::error('Erro ao carregar opções: ' . $e->getMessage(), 500);
    }
}

function obterTecnicos(): array {
    return Database::queryAll(
        "SELECT id, nome 
         FROM usuarios 
         WHERE cargo = 'Técnico' AND ativo = 1 
         ORDER BY nome"
    );
}

function obterVeiculos(): array {
    return Database::queryAll(
        "SELECT 
            id, 
            CONCAT(marca, ' ', modelo, ' (', placa, ')') as descricao,
            placa,
            marca,
            modelo
         FROM veiculos 
         WHERE status IN ('ativo', 'em_uso') 
         ORDER BY marca, modelo, placa"
    );
}

function obterPeriodosPredefinidos(): array {
    return [
        ['valor' => 'hoje', 'label' => 'Hoje'],
        ['valor' => 'ontem', 'label' => 'Ontem'],
        ['valor' => 'semana', 'label' => 'Última Semana'],
        ['valor' => 'mes', 'label' => 'Este Mês'],
        ['valor' => 'mes_anterior', 'label' => 'Mês Anterior'],
        ['valor' => 'trimestre', 'label' => 'Último Trimestre'],
        ['valor' => 'ano', 'label' => 'Este Ano']
    ];
}

function obterTiposAgrupamento(): array {
    return [
        ['valor' => 'hora', 'label' => 'Por Hora'],
        ['valor' => 'dia', 'label' => 'Por Dia'],
        ['valor' => 'semana', 'label' => 'Por Semana'],
        ['valor' => 'mes', 'label' => 'Por Mês']
    ];
} 
