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

// Lidar com requisições OPTIONS (preflight)
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    http_response_code(200);
    exit();
}

// Apenas aceitar POST
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    http_response_code(405);
    echo json_encode(['erro' => 'Método não permitido']);
    exit();
}

require_once '../../config/database.php';

try {
    // Ler dados JSON do corpo da requisição
    $input = file_get_contents('php://input');
    $data = json_decode($input, true);
    
    if (!$data) {
        throw new Exception('Dados JSON inválidos');
    }
    
    // Campos obrigatórios
    if (!isset($data['viagemId']) || !isset($data['imagemBase64'])) {
        throw new Exception('viagemId e imagemBase64 são obrigatórios');
    }
    
    $viagemId = (int)$data['viagemId'];
    $imagemBase64 = $data['imagemBase64'];
    $nomeArquivo = $data['nomeArquivo'] ?? "trajeto_viagem_{$viagemId}";
    
    // Validar Base64
    if (!base64_decode($imagemBase64, true)) {
        throw new Exception('Imagem Base64 inválida');
    }
    
    // Criar diretório se não existir
    $diretorioImagens = '../../uploads/trajetos/';
    if (!is_dir($diretorioImagens)) {
        mkdir($diretorioImagens, 0755, true);
    }
    
    // Gerar nome único para arquivo
    $extensao = 'png'; // Assumindo PNG por padrão
    $nomeArquivoFinal = $nomeArquivo . '_' . date('YmdHis') . '.' . $extensao;
    $caminhoCompleto = $diretorioImagens . $nomeArquivoFinal;
    
    // Decodificar e salvar imagem
    $imagemDecodificada = base64_decode($imagemBase64);
    if (file_put_contents($caminhoCompleto, $imagemDecodificada) === false) {
        throw new Exception('Erro ao salvar arquivo de imagem');
    }
    
    // Salvar referência no banco de dados
    $pdo = getPDOConnection();
    
    // Verificar se viagem existe
    $stmt = $pdo->prepare("SELECT id FROM viagens WHERE id = ?");
    $stmt->execute([$viagemId]);
    if (!$stmt->fetch()) {
        // Se viagem não existe localmente, inserir registro de imagem em tabela separada
        $stmt = $pdo->prepare("
            INSERT INTO trajetos_imagens 
            (viagem_id, caminho_imagem, nome_arquivo, data_upload, tamanho_arquivo) 
            VALUES (?, ?, ?, NOW(), ?)
            ON DUPLICATE KEY UPDATE
            caminho_imagem = VALUES(caminho_imagem),
            nome_arquivo = VALUES(nome_arquivo),
            data_upload = VALUES(data_upload),
            tamanho_arquivo = VALUES(tamanho_arquivo)
        ");
        $stmt->execute([$viagemId, $caminhoCompleto, $nomeArquivoFinal, strlen($imagemDecodificada)]);
    } else {
        // Atualizar tabela de viagens com caminho da imagem
        $stmt = $pdo->prepare("
            UPDATE viagens 
            SET imagem_trajeto = ?, data_atualizacao = NOW() 
            WHERE id = ?
        ");
        $stmt->execute([$caminhoCompleto, $viagemId]);
    }
    
    // Log da operação
    error_log("📸 Imagem de trajeto salva: Viagem $viagemId -> $caminhoCompleto");
    
    // Resposta de sucesso
    echo json_encode([
        'sucesso' => true,
        'mensagem' => 'Imagem do trajeto salva com sucesso',
        'viagemId' => $viagemId,
        'arquivo' => $nomeArquivoFinal,
        'tamanho' => strlen($imagemDecodificada),
        'caminho' => $caminhoCompleto
    ]);
    
} catch (Exception $e) {
    error_log("❌ Erro ao salvar imagem de trajeto: " . $e->getMessage());
    
    http_response_code(400);
    echo json_encode([
        'sucesso' => false,
        'erro' => $e->getMessage()
    ]);
}
?> 
