<?php
/**
 * API para Notificar Gestores sobre Nova Solicitação
 */

require_once __DIR__ . '/../../config/bootstrap.php';

use ControleFrotas\Utils\Logger;

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

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

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    http_response_code(405);
    echo json_encode(['success' => false, 'message' => 'Método não permitido']);
    exit;
}

try {
    $input = json_decode(file_get_contents('php://input'), true);
    
    $solicitacaoId = $input['solicitacao_id'] ?? null;
    $tecnicoId = $input['tecnico_id'] ?? null;
    $cliente = $input['cliente'] ?? 'Cliente';
    $motivo = $input['motivo'] ?? 'Motivo não informado';
    
    if (!$solicitacaoId) {
        http_response_code(400);
        echo json_encode(['success' => false, 'message' => 'ID da solicitação é obrigatório']);
        exit;
    }
    
    // Buscar apenas gestores ativos
    $gestores = Database::queryAll(
        "SELECT DISTINCT user_id FROM fcm_tokens WHERE user_type = 'gestor' AND ativo = TRUE"
    );
    
    if (empty($gestores)) {
        http_response_code(404);
        echo json_encode(['success' => false, 'message' => 'Nenhum gestor encontrado']);
        exit;
    }
    
    $successCount = 0;
    $errorCount = 0;
    
    foreach ($gestores as $gestor) {
        $gestorId = $gestor['user_id'];
        
        // 6. Enviar notificação push para gestores
        try {
            $notificacaoUrl = 'https://sistemas.pinheiroempresas.com.br/controlefrota/backend-php/api/gestao/enviar-notificacao-gestores.php';
            
            $notificacaoData = [
                'titulo' => "🚗 Nova Solicitação de Viagem",
                'mensagem' => "Motorista $tecnicoId solicitou viagem para $cliente - $motivo",
                'tipo' => 'solicitacao_viagem',
                'dados' => [
                    'solicitacao_id' => $solicitacaoId,
                    'tecnico_id' => $tecnicoId,
                    'cliente' => $cliente,
                    'motivo' => $motivo
                ]
            ];
            
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $notificacaoUrl);
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($notificacaoData));
            curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            
            $response = curl_exec($ch);
            $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
            curl_close($ch);
            
            if ($httpCode === 200) {
                error_log("✅ Notificação push enviada para gestores");
            } else {
                error_log("⚠️ Erro ao enviar notificação push: HTTP $httpCode");
            }
        } catch (Exception $e) {
            error_log("⚠️ Exceção ao enviar notificação push: " . $e->getMessage());
        }
    }
    
    // Registrar no banco
    Database::execute(
        "INSERT INTO notificacoes_push (user_id, tipo, titulo, mensagem, solicitacao_id, enviada, data_envio) 
         VALUES (?, 'solicitacao_viagem', ?, ?, ?, TRUE, NOW())",
        ['admin', $titulo, $mensagem, $solicitacaoId]
    );
    
    Logger::info('Notificação de nova solicitação enviada', [
        'solicitacao_id' => $solicitacaoId,
        'success_count' => $successCount,
        'error_count' => $errorCount
    ]);
    
    echo json_encode([
        'success' => $successCount > 0,
        'message' => "Notificações enviadas: $successCount, Erros: $errorCount",
        'total_gestores' => count($gestores),
        'success_count' => $successCount,
        'error_count' => $errorCount
    ]);
    
} catch (Exception $e) {
    Logger::error('Erro ao enviar notificação de nova solicitação', [
        'error' => $e->getMessage(),
        'solicitacao_id' => $solicitacaoId ?? null
    ]);
    
    http_response_code(500);
    echo json_encode([
        'success' => false,
        'message' => 'Erro interno: ' . $e->getMessage()
    ]);
}

/**
 * Função para enviar notificação push via FCM
 */
function enviarNotificacaoPush($gestorId, $titulo, $mensagem, $tipo = 'geral', $dados = []) {
    try {
        $url = 'https://sistemas.pinheiroempresas.com.br/controlefrota/backend-php/api/gestao/enviar-notificacao-push.php';
        
        $postData = [
            'user_id' => $gestorId,
            'titulo' => $titulo,
            'mensagem' => $mensagem,
            'tipo' => $tipo,
            'dados' => $dados
        ];
        
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postData));
        curl_setopt($ch, CURLOPT_HTTPHEADER, [
            'Content-Type: application/json',
            'Authorization: Bearer admin' // Token temporário para teste
        ]);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        
        $response = curl_exec($ch);
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);
        
        if ($httpCode === 200) {
            $responseData = json_decode($response, true);
            if (isset($responseData['success']) && $responseData['success']) {
                return true;
            }
        }
        
        return false;
        
    } catch (Exception $e) {
        return false;
    }
}
?> 
