<?php
/**
 * API Simples de Teste - Sistema de Controle de Frotas
 * Funciona sem dependências externas
 */

// Headers para API
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, Authorization');

// Tratamento de OPTIONS (CORS)
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    http_response_code(200);
    exit();
}

// Carregar configurações do .env
function loadEnv() {
    $config = [];
    
    // Detectar ambiente (produção ou desenvolvimento)
    $isProduction = !in_array($_SERVER['HTTP_HOST'] ?? '', ['localhost', '127.0.0.1', '10.0.2.2']);
    $envFile = $isProduction ? 'env.production' : 'env.development';
    
    // Tentar carregar arquivo de configuração
    if (file_exists($envFile)) {
        $lines = file($envFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
        foreach ($lines as $line) {
            if (strpos($line, '=') !== false && strpos($line, '#') !== 0) {
                list($key, $value) = explode('=', $line, 2);
                $config[trim($key)] = trim($value);
            }
        }
    }
    
    return $config;
}

// Conectar ao banco
function conectarBanco() {
    $config = loadEnv();
    $host = $config['DB_HOST'] ?? 'localhost';
    $dbname = $config['DB_NAME'] ?? 'controle_frotas';
    $username = $config['DB_USER'] ?? 'root';
    $password = $config['DB_PASS'] ?? '';
    
    try {
        $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $username, $password, [
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        ]);
        return $pdo;
    } catch (PDOException $e) {
        throw new Exception('Erro de conexão: ' . $e->getMessage());
    }
}

// JWT simples (sem biblioteca externa)
function criarTokenSimples($dados) {
    $header = base64_encode(json_encode(['typ' => 'JWT', 'alg' => 'HS256']));
    $payload = base64_encode(json_encode($dados));
    $signature = base64_encode(hash_hmac('sha256', "$header.$payload", 'secret_key', true));
    return "$header.$payload.$signature";
}

// Resposta padronizada
function resposta($sucesso, $dados = null, $mensagem = '', $codigo = 200) {
    http_response_code($codigo);
    echo json_encode([
        'sucesso' => $sucesso,
        'dados' => $dados,
        'mensagem' => $mensagem,
        'timestamp' => date('c')
    ], JSON_UNESCAPED_UNICODE);
    exit();
}

// Roteamento simples
$metodo = $_SERVER['REQUEST_METHOD'];
$caminho = $_GET['acao'] ?? 'status';

try {
    switch ($caminho) {
        case 'status':
            resposta(true, [
                'sistema' => 'Controle de Frotas',
                'versao' => '1.0.0',
                'php' => phpversion(),
                'banco_conectado' => true
            ], 'Sistema funcionando');
            break;
            
        case 'login':
            if ($metodo !== 'POST') {
                resposta(false, null, 'Método não permitido', 405);
            }
            
            $input = json_decode(file_get_contents('php://input'), true);
            $email = $input['email'] ?? '';
            $senha = $input['senha'] ?? '';
            
            // Login simples para teste
            if ($email === 'admin@controledefrotas.com' && $senha === 'admin123') {
                $token = criarTokenSimples([
                    'id' => 1,
                    'email' => $email,
                    'exp' => time() + 3600
                ]);
                
                resposta(true, [
                    'token' => $token,
                    'usuario' => [
                        'id' => 1,
                        'email' => $email,
                        'nome' => 'Administrador'
                    ]
                ], 'Login realizado com sucesso');
            } else {
                resposta(false, null, 'Credenciais inválidas', 401);
            }
            break;
            
        case 'viagens':
            $pdo = conectarBanco();
            
            if ($metodo === 'GET') {
                $stmt = $pdo->query("SELECT * FROM viagens ORDER BY data_inicio DESC LIMIT 10");
                $viagens = $stmt->fetchAll();
                resposta(true, $viagens, 'Viagens listadas');
            } elseif ($metodo === 'POST') {
                // Receber viagem do app Android
                $input = json_decode(file_get_contents('php://input'), true);
                
                if (!$input) {
                    resposta(false, null, 'Dados da viagem são obrigatórios', 400);
                }
                
                // Validar campos obrigatórios
                $camposObrigatorios = ['tecnicoId', 'veiculoId', 'cliente', 'motivo', 'kmInicial', 'dataInicio'];
                foreach ($camposObrigatorios as $campo) {
                    if (!isset($input[$campo]) || empty($input[$campo])) {
                        resposta(false, null, "Campo obrigatório: $campo", 400);
                    }
                }
                
                // Inserir viagem no banco
                $sql = "INSERT INTO viagens (
                    tecnico_id, veiculo_id, cliente, motivo, km_inicial, km_final, km_gps_final,
                    data_inicio, data_fim, latitude_inicial, longitude_inicial, latitude_final,
                    longitude_final, observacoes, sincronizado, trajeto
                ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1, ?)";
                
                $trajeto = isset($input['trajeto']) ? json_encode($input['trajeto']) : null;
                
                $stmt = $pdo->prepare($sql);
                $stmt->execute([
                    $input['tecnicoId'],
                    $input['veiculoId'],
                    $input['cliente'],
                    $input['motivo'],
                    $input['kmInicial'],
                    $input['kmFinal'] ?? null,
                    $input['kmGpsFinal'] ?? null,
                    $input['dataInicio'],
                    $input['dataFim'] ?? null,
                    $input['latitudeInicial'] ?? null,
                    $input['longitudeInicial'] ?? null,
                    $input['latitudeFinal'] ?? null,
                    $input['longitudeFinal'] ?? null,
                    $input['observacoes'] ?? null,
                    $trajeto
                ]);
                
                $viagemId = $pdo->lastInsertId();
                resposta(true, ['id' => $viagemId], 'Viagem salva com sucesso');
            } else {
                resposta(false, null, 'Método não suportado', 405);
            }
            break;
            
        case 'dashboard':
            $pdo = conectarBanco();
            
            // Estatísticas básicas
            $stats = [];
            
            try {
                $stmt = $pdo->query("SELECT COUNT(*) as total FROM viagens");
                $stats['total_viagens'] = $stmt->fetch()['total'] ?? 0;
            } catch (Exception $e) {
                $stats['total_viagens'] = 0;
            }
            
            try {
                $stmt = $pdo->query("SELECT COUNT(*) as total FROM usuarios");
                $stats['total_usuarios'] = $stmt->fetch()['total'] ?? 0;
            } catch (Exception $e) {
                $stats['total_usuarios'] = 0;
            }
            
            try {
                $stmt = $pdo->query("SELECT COUNT(*) as total FROM veiculos");
                $stats['total_veiculos'] = $stmt->fetch()['total'] ?? 0;
            } catch (Exception $e) {
                $stats['total_veiculos'] = 0;
            }
            
            try {
                $stmt = $pdo->query("SELECT COUNT(*) as total FROM viagens WHERE data_fim IS NULL");
                $stats['viagens_andamento'] = $stmt->fetch()['total'] ?? 0;
            } catch (Exception $e) {
                $stats['viagens_andamento'] = 0;
            }
            
            resposta(true, $stats, 'Dashboard carregado');
            break;
            
        default:
            resposta(false, null, 'Endpoint não encontrado', 404);
    }
    
} catch (Exception $e) {
    resposta(false, null, 'Erro interno: ' . $e->getMessage(), 500);
}
?> 
