<?php
/**
 * API para Enviar Notificações Push Apenas para Gestores
 */

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;
}

// Permitir chamadas internas do sistema (sem autenticação)

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

// Configuração do FCM
$fcmServerKey = Database::queryOne(
    "SELECT valor FROM configuracoes WHERE chave = 'fcm_server_key'"
)['valor'] ?? null;

if (empty($fcmServerKey)) {
    http_response_code(500);
    echo json_encode(['success' => false, 'message' => 'Chave FCM não configurada']);
    exit;
}

$fcmUrl = 'https://fcm.googleapis.com/fcm/send';

try {
    $input = json_decode(file_get_contents('php://input'), true);
    
    $titulo = $input['titulo'] ?? 'Nova Notificação';
    $mensagem = $input['mensagem'] ?? '';
    $tipo = $input['tipo'] ?? 'geral';
    $dados = $input['dados'] ?? [];
    
    // Buscar APENAS tokens de gestores
    $gestores = Database::queryAll(
        "SELECT token 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) {
        $token = $gestor['token'];
        
        // Preparar dados da notificação
        $notificationData = [
            'to' => $token,
            'notification' => [
                'title' => $titulo,
                'body' => $mensagem,
                'sound' => 'default',
                'badge' => '1'
            ],
            'data' => array_merge($dados, [
                'tipo' => $tipo,
                'timestamp' => time(),
                'click_action' => 'FLUTTER_NOTIFICATION_CLICK'
            ]),
            'priority' => 'high',
            'android' => [
                'priority' => 'high',
                'notification' => [
                    'sound' => 'default',
                    'channel_id' => 'controle_frotas_channel'
                ]
            ]
        ];
        
        // Enviar via FCM
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $fcmUrl);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, [
            'Authorization: key=' . $fcmServerKey,
            'Content-Type: application/json'
        ]);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($notificationData));
        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'] == 1) {
                $successCount++;
                
                // Registrar sucesso no banco
                Database::execute(
                    "INSERT INTO notificacoes_push (user_id, tipo, titulo, mensagem, fcm_token, fcm_message_id, fcm_response, enviada, data_envio) 
                     VALUES (?, ?, ?, ?, ?, ?, ?, TRUE, NOW())",
                    [
                        'gestor',
                        $tipo,
                        $titulo,
                        $mensagem,
                        $token,
                        $responseData['results'][0]['message_id'] ?? null,
                        $response,
                        true
                    ]
                );
                
            } else {
                $errorCount++;
                Logger::error('Erro FCM para gestor', [
                    'response' => $response,
                    'token' => substr($token, 0, 20) . '...'
                ]);
            }
        } else {
            $errorCount++;
            Logger::error('Erro HTTP FCM para gestor', [
                'http_code' => $httpCode,
                'response' => $response
            ]);
        }
    }
    
    // Resposta final
    $result = [
        'success' => $successCount > 0,
        'message' => "Notificações enviadas para gestores: $successCount, Erros: $errorCount",
        'total_gestores' => count($gestores),
        'success_count' => $successCount,
        'error_count' => $errorCount
    ];
    
    if ($successCount > 0) {
        Logger::info('Notificação push enviada para gestores', [
            'tipo' => $tipo,
            'success_count' => $successCount,
            'error_count' => $errorCount
        ]);
    }
    
    echo json_encode($result);
    
} catch (Exception $e) {
    Logger::error('Erro ao enviar notificação push para gestores', [
        'error' => $e->getMessage()
    ]);
    
    http_response_code(500);
    echo json_encode([
        'success' => false,
        'message' => 'Erro interno: ' . $e->getMessage()
    ]);
}
?> 
