# Définir les variables de configuration
#$jsonKeyFile  = "d6cd222549da.json"   # Modifier le chemin vers votre fichier JSON d'authentification
$jsonKeyFile  = "24a11fe72e5.json"
#$projectId    = "abc-prj-np-mdf-001"
$projectId    = "abc-prj-mdf-001"
$Topic        = "MindFlow:publish"
$subscription = "Alerte:pull"
$APIUrl       = "https://pubsub.googleapis.com/v1"
$subject      = "Azure Activity"
$Message      = "Message Lundi 26 Mai Test en directe à 15:40"

$data            = $null
$responsePublish = $null
$responsePull    = $null

# Activer le compte de service avec le fichier JSON
Write-Output "Activation du compte de service..."
gcloud auth activate-service-account --key-file $jsonKeyFile

# Récupérer le token d'accès
Write-Output "Récupération du token d'accès..."
$accessToken = gcloud auth print-access-token

# Définir l'URL de l'API Pub/Sub pour une opération de pull (récupération de messages)
$PublishUrl = "$APIUrl/projects/$projectId/topics/$topic"
$PullUrl    = "$APIUrl/projects/$projectId/subscriptions/$subscription"

# Publier le message sur le topic Pub/Sub
#$base64Message = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($Message))

$Headers = @{
    Authorization  = "Bearer $accessToken"
    "accept"       = "application/json"
    "Content-Type" = "application/json"
}

# Préparer le corps de la requête (ici, on demande jusqu'à 10 messages)
$payloadPublish = @{
    messages = @(
        @{
            data = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($Message))
            attributes = @{
                subject = $subject
            }
        }
    )
} | ConvertTo-Json -Depth 10

Write-Output "Utilisation de l'API Pub/Sub..."
# Appeler l'API Pub/Sub avec une requête POST
$responsePublish = Invoke-RestMethod -Method POST -Uri $PublishUrl -Headers $Headers -Body $payloadPublish

# Afficher la réponse
Write-Output "Réponse de l'API :" $responsePublish | ConvertTo-Json -Depth 10

# Préparer le corps de la requête (ici, on demande jusqu'à 10 messages)
$payloadPull = @{
    maxMessages = 10
} | ConvertTo-Json -Depth 10

Write-Output "Interrogation de l'API Pub/Sub..."
# Appeler l'API Pub/Sub avec une requête POST
$responsePull = Invoke-RestMethod -Method Post -Uri $pullUrl -Headers $headers -Body $payloadPull # -ContentType "application/json"

# Afficher la réponse
If ($responsePull.receivedMessages) {
    Write-Host "Message tiré. Réponse : " $responsePull.receivedMessages
    Foreach ($message in $responsePull.receivedMessages) {
        $data = [System.Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($message.message.data))
        Write-Host "Received message: $data"

    }
}
