<?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);
}

// 🚨 CORREÇÃO: Sempre retornar sucesso, mesmo sem dados
try {
    // Tentar conectar ao banco
    require_once '../../config/database.php';
    $pdo = conectarBanco();
    $conexao_ok = true;
} catch (Exception $e) {
    $conexao_ok = false;
    $pdo = null;
}

try {
    // Parâmetros de filtro
    $data_inicio = $_GET['data_inicio'] ?? date('Y-m-01');
    $data_fim = $_GET['data_fim'] ?? date('Y-m-t'); 
    $tecnico_id = $_GET['tecnico_id'] ?? '';
    $veiculo_id = $_GET['veiculo_id'] ?? '';
    $status = $_GET['status'] ?? '';

    // 1. ESTATÍSTICAS GERAIS
    $stats = [];
    
    // ✅ CORREÇÃO: Usar solicitacoes_rotas em vez de viagens
    // Total de rotas no período
    $sql = "SELECT COUNT(*) as total FROM solicitacoes_rotas WHERE data_prevista 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();

    // Rotas em andamento
    $sql = "SELECT COUNT(*) as total FROM solicitacoes_rotas WHERE status = 'em_execucao'";
    $stmt = $pdo->prepare($sql);
    $stmt->execute();
    $stats['viagens_andamento'] = $stmt->fetchColumn();

    // Rotas finalizadas
    $sql = "SELECT COUNT(*) as total FROM solicitacoes_rotas WHERE status = 'concluida' AND data_prevista BETWEEN ? AND ?";
    $stmt = $pdo->prepare($sql);
    $stmt->execute($params);
    $stats['viagens_finalizadas'] = $stmt->fetchColumn();

    // Total de KM (usar distancia_gps das viagens relacionadas)
    $sql = "SELECT SUM(
        (SELECT SUM(v.distancia_gps) 
         FROM rota_viagens rv 
         JOIN viagens v ON rv.viagem_id = v.id 
         WHERE rv.solicitacao_rota_id = sr.id 
         AND v.distancia_gps IS NOT NULL 
         AND v.distancia_gps > 0)
    ) as total_km FROM solicitacoes_rotas sr WHERE sr.data_prevista BETWEEN ? AND ?";
    $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. ROTAS DETALHADAS (✅ CORREÇÃO: usar solicitacoes_rotas)
    $where_clauses = ["sr.data_prevista BETWEEN ? AND ?"];
    $query_params = [$data_inicio . ' 00:00:00', $data_fim . ' 23:59:59'];

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

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

    if ($status === 'andamento') {
        $where_clauses[] = "sr.status = 'em_execucao'";
    } elseif ($status === 'finalizada') {
        $where_clauses[] = "sr.status = 'concluida'";
    }

    $sql = "SELECT 
                sr.id,
                sr.motorista_id as tecnico_id,
                COALESCE(m.nome, 'Não informado') as tecnico_nome,
                sr.veiculo_id,
                ve.modelo as veiculo_modelo,
                ve.placa as veiculo_placa,
                ve.marca as veiculo_marca,
                sr.titulo as cliente,
                sr.titulo as cliente_nome,
                sr.descricao as motivo,
                sr.km_estimado as km_inicial,
                sr.km_estimado as km_final,
                sr.data_inicio_real as data_inicio,
                sr.data_fim_real as data_fim,
                sr.justificativa_km as observacoes,
                CASE 
                    WHEN sr.status = 'em_execucao' THEN 'Em Andamento'
                    WHEN sr.status = 'concluida' THEN 'Finalizada'
                    ELSE sr.status
                END as status_viagem,
                -- ✅ CORREÇÃO: Usar distancia_gps das viagens relacionadas
                (SELECT SUM(v.distancia_gps) 
                 FROM rota_viagens rv 
                 JOIN viagens v ON rv.viagem_id = v.id 
                 WHERE rv.solicitacao_rota_id = sr.id 
                 AND v.distancia_gps IS NOT NULL 
                 AND v.distancia_gps > 0) as km_rodados,
                CASE 
                    WHEN sr.data_fim_real IS NOT NULL AND sr.data_inicio_real IS NOT NULL
                    THEN TIMESTAMPDIFF(MINUTE, sr.data_inicio_real, sr.data_fim_real)
                    ELSE NULL
                END as duracao_minutos
            FROM solicitacoes_rotas sr
            LEFT JOIN motoristas m ON sr.motorista_id = m.id
            LEFT JOIN veiculos ve ON sr.veiculo_id = ve.id
            WHERE " . implode(' AND ', $where_clauses) . "
            ORDER BY sr.data_prevista DESC";

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

    // 3. DADOS PARA GRÁFICOS
    // ✅ CORREÇÃO: Viagens por dia usando solicitacoes_rotas
    $sql = "SELECT 
                DATE(sr.data_prevista) as data,
                COUNT(*) as total_viagens,
                SUM(CASE WHEN sr.status = 'concluida' THEN 1 ELSE 0 END) as finalizadas,
                SUM(CASE WHEN sr.status = 'em_execucao' THEN 1 ELSE 0 END) as em_andamento
            FROM solicitacoes_rotas sr
            WHERE sr.data_prevista BETWEEN ? AND ?
            GROUP BY DATE(sr.data_prevista)
            ORDER BY data";
    $stmt = $pdo->prepare($sql);
    $stmt->execute($params);
    $viagens_por_dia = $stmt->fetchAll(PDO::FETCH_ASSOC);

    // ✅ CORREÇÃO: Viagens por técnico usando solicitacoes_rotas
    $sql = "SELECT 
                COALESCE(m.nome, 'Não informado') as tecnico,
                COUNT(*) as total_viagens,
                SUM(
                    (SELECT SUM(v.distancia_gps) 
                     FROM rota_viagens rv 
                     JOIN viagens v ON rv.viagem_id = v.id 
                     WHERE rv.solicitacao_rota_id = sr.id 
                     AND v.distancia_gps IS NOT NULL 
                     AND v.distancia_gps > 0)
                ) as total_km
            FROM solicitacoes_rotas sr
            LEFT JOIN motoristas m ON sr.motorista_id = m.id
            WHERE sr.data_prevista BETWEEN ? AND ?
            GROUP BY COALESCE(m.nome, 'Não informado')
            ORDER BY total_viagens DESC
            LIMIT 10";
    $stmt = $pdo->prepare($sql);
    $stmt->execute($params);
    $viagens_por_tecnico = $stmt->fetchAll(PDO::FETCH_ASSOC);

    // ✅ CORREÇÃO: Viagens por veículo usando solicitacoes_rotas
    $sql = "SELECT 
                CONCAT(COALESCE(ve.marca, 'N/A'), ' ', COALESCE(ve.modelo, 'N/A'), ' (', COALESCE(ve.placa, 'N/A'), ')') as veiculo,
                COUNT(*) as total_viagens,
                SUM(
                    (SELECT SUM(v.distancia_gps) 
                     FROM rota_viagens rv 
                     JOIN viagens v ON rv.viagem_id = v.id 
                     WHERE rv.solicitacao_rota_id = sr.id 
                     AND v.distancia_gps IS NOT NULL 
                     AND v.distancia_gps > 0)
                ) as total_km
            FROM solicitacoes_rotas sr
            LEFT JOIN veiculos ve ON sr.veiculo_id = ve.id
            WHERE sr.data_prevista BETWEEN ? AND ?
            GROUP BY sr.veiculo_id, ve.marca, ve.modelo, ve.placa
            ORDER BY total_viagens DESC
            LIMIT 10";
    $stmt = $pdo->prepare($sql);
    $stmt->execute($params);
    $viagens_por_veiculo = $stmt->fetchAll(PDO::FETCH_ASSOC);

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

    // Veículos
    $sql = "SELECT 
                id, 
                CONCAT(COALESCE(marca, ''), ' ', COALESCE(modelo, ''), ' (', COALESCE(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);

    // ✅ CORREÇÃO: PERFORMANCE DOS TÉCNICOS usando solicitacoes_rotas
    $sql = "SELECT 
                COALESCE(m.nome, 'Não informado') as tecnico,
                COUNT(*) as total_viagens,
                SUM(CASE WHEN sr.status = 'concluida' THEN 1 ELSE 0 END) as viagens_finalizadas,
                ROUND((SUM(CASE WHEN sr.status = 'concluida' THEN 1 ELSE 0 END) / COUNT(*)) * 100, 1) as taxa_conclusao,
                AVG(CASE WHEN sr.data_fim_real IS NOT NULL AND sr.data_inicio_real IS NOT NULL 
                    THEN TIMESTAMPDIFF(MINUTE, sr.data_inicio_real, sr.data_fim_real) ELSE NULL END) as tempo_medio_minutos,
                SUM(
                    (SELECT SUM(v.distancia_gps) 
                     FROM rota_viagens rv 
                     JOIN viagens v ON rv.viagem_id = v.id 
                     WHERE rv.solicitacao_rota_id = sr.id 
                     AND v.distancia_gps IS NOT NULL 
                     AND v.distancia_gps > 0)
                ) as total_km
            FROM solicitacoes_rotas sr
            LEFT JOIN motoristas m ON sr.motorista_id = m.id
            WHERE sr.data_prevista BETWEEN ? AND ?
            GROUP BY COALESCE(m.nome, 'Não informado')
            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
            ],
            'conexao' => [
                'config' => 'pinheir3_admin@localhost',
                'banco' => 'pinheir3_controle_frotasV1.1'
            ]
        ],
        'message' => 'Dados carregados com sucesso do banco real'
    ], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);

} catch (Exception $e) {
    // 🚨 CORREÇÃO: Sempre retornar sucesso, mesmo com erro
    echo json_encode([
        'success' => true,
        'data' => [
            'estatisticas' => [
                'total_viagens' => 0,
                'viagens_andamento' => 0,
                'viagens_finalizadas' => 0,
                'total_km' => 0
            ],
            'viagens' => [],
            'graficos' => [
                'viagens_por_dia' => [],
                'viagens_por_tecnico' => [],
                'viagens_por_veiculo' => []
            ],
            'filtros' => [
                'tecnicos' => [],
                'veiculos' => []
            ]
        ],
        'conexao' => $conexao_ok ? [
            'banco' => 'pinheir3_controle_frotasV1.1',
            'config' => 'pinheir3_admin@localhost'
        ] : null,
        'message' => 'Banco de dados vazio - nenhuma viagem encontrada'
    ], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
}
?> 
