<?php
/**
 * API de Solicitações de Viagem - Versão Ultra Simplificada
 */

header('Content-Type: application/json');

// Configuração básica de conexão
$host = 'localhost';
$dbname = 'pinheir3_controle_frotasV1.1';
$username = 'pinheir3_admin';
$password = '080880Gelboy';

// Função para conectar ao banco
function getConnection() {
    global $host, $dbname, $username, $password;
    
    try {
        $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $username, $password);
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        return $pdo;
    } catch (Exception $e) {
        return null;
    }
}

// Função para enviar resposta de sucesso
function sendSuccess($data, $message = 'Sucesso') {
    echo json_encode([
        'success' => true,
        'timestamp' => date('Y-m-d H:i:s'),
        'message' => $message,
        'data' => $data
    ]);
    exit;
}

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

// Verificar ação
$acao = $_GET['acao'] ?? '';

try {
    // Conectar ao banco
    $pdo = getConnection();
    if (!$pdo) {
        sendError('Erro de conexão com banco de dados', 500);
    }

    if ($acao === 'criar') {
        // Verificar método HTTP para criação
        if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
            sendError('Método não permitido', 405);
        }

        // Obter dados da requisição
        $input = json_decode(file_get_contents('php://input'), true);
        
        if (!$input) {
            sendError('Dados da solicitação são obrigatórios', 400);
        }

        // Validar campos obrigatórios
        $camposObrigatorios = ['veiculo_id', 'cliente', 'motivo', 'km_inicial'];
        foreach ($camposObrigatorios as $campo) {
            if (!isset($input[$campo]) || empty($input[$campo])) {
                sendError("Campo obrigatório: $campo", 400);
            }
        }

        // Inserir solicitação
        $sql = "INSERT INTO solicitacoes_viagem (
            tecnico_id, veiculo_id, cliente, motivo, km_inicial,
            latitude_inicial, longitude_inicial, endereco_inicial,
            cliente_id, gestor_id, observacoes, prioridade, status
        ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'pendente')";

        $stmt = $pdo->prepare($sql);
        $result = $stmt->execute([
            '4', // tecnico_id (fixo para teste)
            $input['veiculo_id'],
            $input['cliente'],
            $input['motivo'],
            $input['km_inicial'],
            $input['latitude_inicial'] ?? null,
            $input['longitude_inicial'] ?? null,
            $input['endereco_inicial'] ?? null,
            $input['cliente_id'] ?? null,
            $input['gestor_id'] ?? 2, // Usar gestor_id do input ou 2 como padrão
            $input['observacoes'] ?? null,
            $input['prioridade'] ?? 'normal'
        ]);

        if (!$result) {
            $error = $stmt->errorInfo();
            sendError('Erro na inserção: ' . $error[2], 500);
        }

        $solicitacaoId = $pdo->lastInsertId();

        // Salvar notificação local para gestores
        try {
            // Buscar apenas o gestor específico escolhido na solicitação
            $gestorIdEscolhido = $input['gestor_id'] ?? 2;
            $sql_gestor = "SELECT id, nome, ntfy_topic FROM gestores WHERE id = ? AND status = 'ativo' AND ntfy_topic IS NOT NULL AND ntfy_topic != ''";
            $stmt_gestor = $pdo->prepare($sql_gestor);
            $stmt_gestor->execute([$gestorIdEscolhido]);
            $gestor = $stmt_gestor->fetch();
            
            if ($gestor) {
                $gestorId = $gestor['id'];
                $ntfyTopic = $gestor['ntfy_topic'];
                
                // Inserir notificação na tabela notificacoes_push
                $sql_notificacao = "INSERT INTO notificacoes_push (
                    user_id, tipo, titulo, mensagem, solicitacao_id, data_envio, lida
                ) VALUES (?, 'solicitacao_viagem', ?, ?, ?, NOW(), 0)";
                
                $stmt_notificacao = $pdo->prepare($sql_notificacao);
                $titulo = "🚗 Nova Solicitação de Viagem";
                $mensagem = "Motorista Administrador solicitou viagem para {$input['cliente']} - {$input['motivo']}";
                
                $stmt_notificacao->execute([
                    $gestorId,
                    $titulo,
                    $mensagem,
                    $solicitacaoId
                ]);
                
                error_log("✅ Notificação criada para gestor $gestorId: $titulo");
                
                // 🚀 ENVIAR NOTIFICAÇÃO VIA NTFY PARA TÓPICO INDIVIDUAL
                if (!empty($ntfyTopic)) {
                    try {
                        $ntfyUrl = 'https://ntfy.sh/' . $ntfyTopic;
                        
                        // Montar mensagem mais detalhada
                        $mensagemDetalhada = "Motorista: Administrador\n";
                        $mensagemDetalhada .= "Cliente: {$input['cliente']}\n";
                        $mensagemDetalhada .= "Motivo: {$input['motivo']}\n";
                        $mensagemDetalhada .= "Prioridade: " . strtoupper($input['prioridade'] ?? 'normal') . "\n";
                        $mensagemDetalhada .= "KM Inicial: {$input['km_inicial']}\n";
                        $mensagemDetalhada .= "Solicitação ID: #{$solicitacaoId}";
                        
                        $ch = curl_init();
                        curl_setopt($ch, CURLOPT_URL, $ntfyUrl);
                        curl_setopt($ch, CURLOPT_POST, true);
                        curl_setopt($ch, CURLOPT_POSTFIELDS, $mensagemDetalhada);
                        curl_setopt($ch, CURLOPT_HTTPHEADER, [
                            'Title: ' . $titulo,
                            'Content-Type: text/plain',
                            'Click: controlefrota://solicitacao/' . $solicitacaoId . '?gestor_id=' . $gestorIdEscolhido,
                            'Priority: ' . ($input['prioridade'] === 'urgente' ? 'urgent' : 'default'),
                            'Tags: car,check'
                        ]);
                        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                        curl_setopt($ch, CURLOPT_TIMEOUT, 10);
                        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
                        
                        $ntfyResponse = curl_exec($ch);
                        $ntfyHttpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
                        curl_close($ch);
                        
                        if ($ntfyHttpCode === 200) {
                            error_log("🚀 Notificação ntfy enviada com sucesso para $ntfyTopic!");
                        } else {
                            error_log("⚠️ Erro ao enviar notificação ntfy para $ntfyTopic: HTTP $ntfyHttpCode");
                        }
                    } catch (Exception $e) {
                        error_log("⚠️ Exceção ao enviar notificação ntfy para $ntfyTopic: " . $e->getMessage());
                    }
                }
            } else {
                error_log("⚠️ Gestor ID $gestorIdEscolhido não encontrado ou sem ntfy_topic");
            }
            
        } catch (Exception $e) {
            // Log do erro mas não falhar a solicitação
            error_log("⚠️ Erro ao salvar notificação: " . $e->getMessage());
        }
        
        // Resposta de sucesso
        sendSuccess([
            'solicitacao_id' => $solicitacaoId,
            'status' => 'pendente',
            'mensagem' => 'Solicitação enviada para aprovação do gestor'
        ]);

    } elseif ($acao === 'listar') {
        // Verificar método HTTP para listagem
        if ($_SERVER['REQUEST_METHOD'] !== 'GET') {
            sendError('Método não permitido', 405);
        }

        // Listar solicitações pendentes para o gestor
        $gestorId = $_GET['gestor_id'] ?? 2; // Usar gestor_id 2 como padrão para teste
        
        $sql = "SELECT 
                    sv.id,
                    sv.tecnico_id,
                    m.nome as tecnico_nome,
                    sv.veiculo_id,
                    v.modelo as veiculo_modelo,
                    v.placa as veiculo_placa,
                    sv.cliente,
                    sv.motivo,
                    sv.km_inicial,
                    sv.latitude_inicial,
                    sv.longitude_inicial,
                    sv.endereco_inicial,
                    sv.cliente_id,
                    sv.status,
                    sv.observacoes,
                    sv.prioridade,
                    sv.created_at as data_solicitacao,
                    TIMESTAMPDIFF(MINUTE, sv.created_at, NOW()) as tempo_espera_minutos
                FROM solicitacoes_viagem sv
                LEFT JOIN motoristas m ON sv.tecnico_id = m.id
                LEFT JOIN veiculos v ON sv.veiculo_id = v.id
                WHERE sv.gestor_id = ? AND sv.status = 'pendente'
                ORDER BY sv.created_at DESC";

        $stmt = $pdo->prepare($sql);
        $stmt->execute([$gestorId]);
        $solicitacoes = $stmt->fetchAll(PDO::FETCH_ASSOC);

        sendSuccess($solicitacoes, 'Solicitações listadas com sucesso');

    } else {
        sendError('Ação não reconhecida', 400);
    }

} catch (Exception $e) {
    sendError('Erro interno: ' . $e->getMessage(), 500);
}
?> 
