<?php
require_once __DIR__ . '/../../vendor/autoload.php';
require_once __DIR__ . '/../../config/bootstrap.php';

use Google\Auth\Credentials\ServiceAccountCredentials;

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');

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';
    $prioridade = $input['prioridade'] ?? 'normal';
    
    if (!$solicitacaoId) {
        http_response_code(400);
        echo json_encode(['success' => false, 'message' => 'ID da solicitação é obrigatório']);
        exit;
    }

    // Buscar o token FCM mais recente do gestor
    $gestor = Database::queryOne(
        "SELECT token FROM fcm_tokens WHERE user_type = 'gestor' AND ativo = 1 AND token IS NOT NULL AND token != '' ORDER BY ultimo_uso DESC LIMIT 1"
    );
    $fcmToken = $gestor['token'] ?? null;

    if (!$fcmToken) {
        http_response_code(404);
        echo json_encode(['success' => false, 'message' => 'Nenhum gestor com token FCM encontrado']);
        exit;
    }

    // Caminho para a chave de serviço
    $serviceAccountPath = __DIR__ . '/../../firebase-service-account.json';
    $projectId = 'controlefrota-d0989';

    // Gerar access token OAuth2
    $credentials = new ServiceAccountCredentials(
        'https://www.googleapis.com/auth/firebase.messaging',
        $serviceAccountPath
    );
    $accessToken = $credentials->fetchAuthToken()['access_token'];

    // Montar payload
    $message = [
        'message' => [
            'token' => $fcmToken,
            'notification' => [
                'title' => '🚗 Nova Solicitação de Viagem',
                'body' => "Motorista $tecnicoId solicitou viagem para $cliente - $motivo"
            ],
            'android' => [
                'priority' => 'HIGH',
                'notification' => [
                    'sound' => 'default'
                ]
            ],
            'data' => [
                'tipo' => 'solicitacao_viagem',
                'solicitacao_id' => (string)$solicitacaoId,
                'tecnico_id' => (string)$tecnicoId,
                'cliente' => $cliente,
                'motivo' => $motivo,
                'prioridade' => $prioridade,
                'timestamp' => (string)time()
            ]
        ]
    ];

    // Enviar para o endpoint HTTP v1
    $url = "https://fcm.googleapis.com/v1/projects/{$projectId}/messages:send";
    $headers = [
        "Authorization: Bearer $accessToken",
        "Content-Type: application/json"
    ];

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($message));
    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    if ($httpCode === 200) {
        echo json_encode(['success' => true, 'message' => 'Notificação enviada via FCM HTTP v1', 'response' => $response]);
    } else {
        http_response_code($httpCode);
        echo json_encode(['success' => false, 'message' => 'Erro HTTP ao enviar notificação FCM', 'response' => $response]);
    }
    return;
    
} catch (Exception $e) {
    http_response_code(500);
    echo json_encode([
        'success' => false,
        'message' => 'Erro interno: ' . $e->getMessage()
    ]);
}
?> 
