<?php
/**
 * Endpoint de Sincronização Completa - Versão Corrigida
 * Retorna dados básicos para o app funcionar offline
 */

// Headers básicos
header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type');

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

// Função para resposta de erro
function enviarErro($mensagem, $codigo = 500) {
    http_response_code($codigo);
    echo json_encode([
        'success' => false,
        'message' => $mensagem,
        'timestamp' => date('Y-m-d H:i:s')
    ], JSON_UNESCAPED_UNICODE);
    exit();
}

// Função para resposta de sucesso
function enviarSucesso($dados) {
    http_response_code(200);
    echo json_encode([
        'success' => true,
        'message' => 'Sincronização realizada com sucesso',
        'timestamp' => date('Y-m-d H:i:s'),
        'data' => [
            'dados' => $dados,
            'estatisticas' => [
                'total_motoristas' => count($dados['motoristas']),
                'total_veiculos' => count($dados['veiculos']),
                'total_viagens' => 0,
                'total_clientes' => count($dados['clientes'])
            ]
        ]
    ], JSON_UNESCAPED_UNICODE);
    exit();
}

try {
    // Conectar ao banco com credenciais CORRETAS
    $pdo = new PDO(
        "mysql:host=localhost;dbname=pinheir3_controle_frotasV1.1;charset=utf8mb4", 
        "pinheir3_admin", 
        "080880Gelboy",
        [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
    );
    
    $dadosSync = [];
    
    // 1. MOTORISTAS
    try {
        $sql = "SELECT id, nome, usuario, matricula, cpf, telefone, senha, status 
                FROM motoristas 
                WHERE status = 'ativo' 
                ORDER BY nome";
        
        $stmt = $pdo->query($sql);
        $motoristas = $stmt->fetchAll(PDO::FETCH_ASSOC);
        
        // Sanitizar senhas longas (hashes)
        foreach ($motoristas as &$motorista) {
            if (isset($motorista['senha']) && strlen($motorista['senha']) > 50) {
                // Para hashes muito longos, usar matrícula como senha
                $motorista['senha'] = $motorista['matricula'] ?: '123456';
            }
        }
        
        $dadosSync['motoristas'] = $motoristas;
        
    } catch (Exception $e) {
        $dadosSync['motoristas'] = [];
    }
    
    // 2. VEÍCULOS
    try {
        $sql = "SELECT id, placa, modelo, marca, ano_fabricacao AS ano, cor, tipo, status 
                FROM veiculos 
                WHERE status = 'ativo' 
                ORDER BY placa";
        
        $stmt = $pdo->query($sql);
        $dadosSync['veiculos'] = $stmt->fetchAll(PDO::FETCH_ASSOC);
        
    } catch (Exception $e) {
        $dadosSync['veiculos'] = [];
    }
    
    // 3. CLIENTES
    try {
        $sql = "SELECT id, nome, cpf_cnpj, telefone, email, status 
                FROM clientes 
                WHERE status = 'ativo' 
                ORDER BY nome";
        
        $stmt = $pdo->query($sql);
        $dadosSync['clientes'] = $stmt->fetchAll(PDO::FETCH_ASSOC);
        
    } catch (Exception $e) {
        $dadosSync['clientes'] = [];
    }
    
    // 4. GESTORES
    try {
        $sql = "SELECT id, nome, email, usuario, nivel_acesso, telefone, departamento, foto, status, data_criacao, data_ultimo_acesso FROM gestores WHERE status = 'ativo' ORDER BY nivel_acesso DESC, nome ASC";
        $stmt = $pdo->query($sql);
        $dadosSync['gestores'] = $stmt->fetchAll(PDO::FETCH_ASSOC);
    } catch (Exception $e) {
        $dadosSync['gestores'] = [];
    }
    
    // Adicionar totais
    $dadosSync['totais'] = [
        'motoristas' => count($dadosSync['motoristas']),
        'veiculos' => count($dadosSync['veiculos']),
        'clientes' => count($dadosSync['clientes'])
    ];
    
    // Enviar resposta
    enviarSucesso($dadosSync);
    
} catch (PDOException $e) {
    enviarErro("Erro na conexão com banco: " . $e->getMessage());
    
} catch (Exception $e) {
    enviarErro("Erro interno: " . $e->getMessage());
}
?> 
