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

if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    exit(0);
}

// Configurações diretas do banco conforme o SQL fornecido
define('DB_HOST', 'localhost');
define('DB_NAME', 'pinheir3_controle_frotasV1.1');
define('DB_USER', 'pinheir3');
define('DB_PASS', ''); // Senha será configurada conforme ambiente

try {
    $pdo = new PDO(
        "mysql:host=" . DB_HOST . ";dbname=" . DB_NAME . ";charset=utf8mb4",
        DB_USER,
        DB_PASS,
        [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
    );

    // Parâmetros de filtro
    $data_inicio = $_GET['data_inicio'] ?? date('Y-m-01'); // Primeiro dia do mês atual
    $data_fim = $_GET['data_fim'] ?? date('Y-m-t'); // Último dia do mês atual
    $tecnico_id = $_GET['tecnico_id'] ?? '';
    $veiculo_id = $_GET['veiculo_id'] ?? '';
    $status = $_GET['status'] ?? '';

    // 1. ESTATÍSTICAS GERAIS
    $stats = [];
    
    // Total de viagens
    $sql = "SELECT COUNT(*) as total FROM viagens WHERE data_inicio BETWEEN ? AND ?";
    $params = [$data_inicio . ' 00:00:00', $data_fim . ' 23:59:59'];
    $stmt = $pdo->prepare($sql);
    $stmt->execute($params);
    $stats['total_viagens'] = $stmt->fetchColumn();

    // Viagens em andamento
    $sql = "SELECT COUNT(*) as total FROM viagens WHERE data_fim IS NULL";
    $stmt = $pdo->prepare($sql);
    $stmt->execute();
    $stats['viagens_andamento'] = $stmt->fetchColumn();

    // Viagens finalizadas no período
    $sql = "SELECT COUNT(*) as total FROM viagens WHERE data_inicio BETWEEN ? AND ? AND data_fim IS NOT NULL";
    $stmt = $pdo->prepare($sql);
    $stmt->execute($params);
    $stats['viagens_finalizadas'] = $stmt->fetchColumn();

    // Total de KM rodados
    $sql = "SELECT SUM(km_final - km_inicial) as total_km FROM viagens WHERE data_inicio BETWEEN ? AND ? AND km_final IS NOT NULL";
    $stmt = $pdo->prepare($sql);
    $stmt->execute($params);
    $stats['total_km'] = $stmt->fetchColumn() ?? 0;

    // Veículos ativos
    $sql = "SELECT COUNT(*) as total FROM veiculos WHERE status = 'ativo'";
    $stmt = $pdo->prepare($sql);
    $stmt->execute();
    $stats['veiculos_ativos'] = $stmt->fetchColumn();

    // Veículos em uso
    $sql = "SELECT COUNT(*) as total FROM veiculos WHERE status = 'em_uso'";
    $stmt = $pdo->prepare($sql);
    $stmt->execute();
    $stats['veiculos_em_uso'] = $stmt->fetchColumn();

    // 2. VIAGENS DETALHADAS
    $where_clauses = ["v.data_inicio BETWEEN ? AND ?"];
    $query_params = [$data_inicio . ' 00:00:00', $data_fim . ' 23:59:59'];

    if (!empty($tecnico_id)) {
        $where_clauses[] = "v.tecnico_id = ?";
        $query_params[] = $tecnico_id;
    }

    if (!empty($veiculo_id)) {
        $where_clauses[] = "v.veiculo_id = ?";
        $query_params[] = $veiculo_id;
    }

    if ($status === 'andamento') {
        $where_clauses[] = "v.data_fim IS NULL";
    } elseif ($status === 'finalizada') {
        $where_clauses[] = "v.data_fim IS NOT NULL";
    }

    $sql = "SELECT 
                v.id,
                v.tecnico_id,
                COALESCE(m.nome, v.tecnico_id) as tecnico_nome,
                v.veiculo_id,
                ve.modelo as veiculo_modelo,
                ve.placa as veiculo_placa,
                ve.marca as veiculo_marca,
                v.cliente,
                c.nome as cliente_nome,
                v.motivo,
                v.km_inicial,
                v.km_final,
                v.data_inicio,
                v.data_fim,
                v.observacoes,
                CASE 
                    WHEN v.data_fim IS NULL THEN 'Em Andamento'
                    ELSE 'Finalizada'
                END as status_viagem,
                CASE 
                    WHEN v.data_fim IS NOT NULL AND v.km_final IS NOT NULL 
                    THEN (v.km_final - v.km_inicial)
                    ELSE 0
                END as km_rodados,
                CASE 
                    WHEN v.data_fim IS NOT NULL 
                    THEN TIMESTAMPDIFF(MINUTE, v.data_inicio, v.data_fim)
                    ELSE NULL
                END as duracao_minutos
            FROM viagens v
            LEFT JOIN motoristas m ON (v.tecnico_id = m.id OR v.tecnico_id = m.nome)
            LEFT JOIN veiculos ve ON v.veiculo_id = ve.id
            LEFT JOIN clientes c ON v.cliente_id = c.id
            WHERE " . implode(' AND ', $where_clauses) . "
            ORDER BY v.data_inicio DESC";

    $stmt = $pdo->prepare($sql);
    $stmt->execute($query_params);
    $viagens = $stmt->fetchAll(PDO::FETCH_ASSOC);

    // 3. DADOS PARA GRÁFICOS
    // Viagens por dia
    $sql = "SELECT 
                DATE(data_inicio) as data,
                COUNT(*) as total_viagens,
                SUM(CASE WHEN data_fim IS NOT NULL THEN 1 ELSE 0 END) as finalizadas,
                SUM(CASE WHEN data_fim IS NULL THEN 1 ELSE 0 END) as em_andamento
            FROM viagens 
            WHERE data_inicio BETWEEN ? AND ?
            GROUP BY DATE(data_inicio)
            ORDER BY data";
    $stmt = $pdo->prepare($sql);
    $stmt->execute($params);
    $viagens_por_dia = $stmt->fetchAll(PDO::FETCH_ASSOC);

    // Viagens por técnico
    $sql = "SELECT 
                COALESCE(m.nome, v.tecnico_id) as tecnico,
                COUNT(*) as total_viagens,
                SUM(CASE WHEN v.km_final IS NOT NULL THEN (v.km_final - v.km_inicial) ELSE 0 END) as total_km
            FROM viagens v
            LEFT JOIN motoristas m ON (v.tecnico_id = m.id OR v.tecnico_id = m.nome)
            WHERE v.data_inicio BETWEEN ? AND ?
            GROUP BY v.tecnico_id, m.nome
            ORDER BY total_viagens DESC";
    $stmt = $pdo->prepare($sql);
    $stmt->execute($params);
    $viagens_por_tecnico = $stmt->fetchAll(PDO::FETCH_ASSOC);

    // Viagens por veículo
    $sql = "SELECT 
                CONCAT(ve.marca, ' ', ve.modelo, ' (', ve.placa, ')') as veiculo,
                COUNT(*) as total_viagens,
                SUM(CASE WHEN v.km_final IS NOT NULL THEN (v.km_final - v.km_inicial) ELSE 0 END) as total_km
            FROM viagens v
            LEFT JOIN veiculos ve ON v.veiculo_id = ve.id
            WHERE v.data_inicio BETWEEN ? AND ?
            GROUP BY v.veiculo_id, ve.marca, ve.modelo, ve.placa
            ORDER BY total_viagens DESC";
    $stmt = $pdo->prepare($sql);
    $stmt->execute($params);
    $viagens_por_veiculo = $stmt->fetchAll(PDO::FETCH_ASSOC);

    // 4. LISTAS PARA FILTROS
    // Técnicos/Motoristas
    $sql = "SELECT id, nome FROM motoristas WHERE status = 'ativo' ORDER BY nome";
    $stmt = $pdo->prepare($sql);
    $stmt->execute();
    $tecnicos = $stmt->fetchAll(PDO::FETCH_ASSOC);

    // Veículos
    $sql = "SELECT id, CONCAT(marca, ' ', modelo, ' (', placa, ')') as nome FROM veiculos WHERE status IN ('ativo', 'em_uso') ORDER BY marca, modelo";
    $stmt = $pdo->prepare($sql);
    $stmt->execute();
    $veiculos = $stmt->fetchAll(PDO::FETCH_ASSOC);

    // Clientes
    $sql = "SELECT id, nome FROM clientes WHERE status = 'ativo' ORDER BY nome";
    $stmt = $pdo->prepare($sql);
    $stmt->execute();
    $clientes = $stmt->fetchAll(PDO::FETCH_ASSOC);

    // 5. PERFORMANCE DOS TÉCNICOS
    $sql = "SELECT 
                COALESCE(m.nome, v.tecnico_id) as tecnico,
                COUNT(*) as total_viagens,
                SUM(CASE WHEN v.data_fim IS NOT NULL THEN 1 ELSE 0 END) as viagens_finalizadas,
                ROUND((SUM(CASE WHEN v.data_fim IS NOT NULL THEN 1 ELSE 0 END) / COUNT(*)) * 100, 1) as taxa_conclusao,
                AVG(CASE WHEN v.data_fim IS NOT NULL THEN TIMESTAMPDIFF(MINUTE, v.data_inicio, v.data_fim) ELSE NULL END) as tempo_medio_minutos,
                SUM(CASE WHEN v.km_final IS NOT NULL THEN (v.km_final - v.km_inicial) ELSE 0 END) as total_km
            FROM viagens v
            LEFT JOIN motoristas m ON (v.tecnico_id = m.id OR v.tecnico_id = m.nome)
            WHERE v.data_inicio BETWEEN ? AND ?
            GROUP BY v.tecnico_id, m.nome
            HAVING total_viagens > 0
            ORDER BY taxa_conclusao DESC, total_viagens DESC";
    $stmt = $pdo->prepare($sql);
    $stmt->execute($params);
    $performance_tecnicos = $stmt->fetchAll(PDO::FETCH_ASSOC);

    // Resposta final
    echo json_encode([
        'success' => true,
        'data' => [
            'estatisticas' => $stats,
            'viagens' => $viagens,
            'graficos' => [
                'viagens_por_dia' => $viagens_por_dia,
                'viagens_por_tecnico' => $viagens_por_tecnico,
                'viagens_por_veiculo' => $viagens_por_veiculo
            ],
            'filtros' => [
                'tecnicos' => $tecnicos,
                'veiculos' => $veiculos,
                'clientes' => $clientes
            ],
            'performance' => $performance_tecnicos,
            'periodo' => [
                'inicio' => $data_inicio,
                'fim' => $data_fim
            ]
        ],
        'message' => 'Dados carregados com sucesso'
    ], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);

} catch (Exception $e) {
    http_response_code(500);
    echo json_encode([
        'success' => false,
        'error' => $e->getMessage(),
        'message' => 'Erro ao carregar dados'
    ], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
}
?> 
