import json
import ssl
import pika
import os
import requests

headers = {"X-Aws-Parameters-Secrets-Token": os.environ.get('AWS_SESSION_TOKEN')}


def lambda_handler(event, context):
    messageBody = json.dumps(event['messageBody'])
    host = event['host']
    secret = event['secret']
    appId = event['appId']

    secrets_extension_endpoint = "http://localhost:2773/secretsmanager/get?secretId=" + secret
    r = requests.get(secrets_extension_endpoint, headers=headers)
    creds = json.loads(json.loads(r.text)['SecretString'])


    # SSL Context for TLS configuration of Amazon MQ for RabbitMQ
    ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
    ssl_context.set_ciphers('ECDHE+AESGCM:!ECDSA')

    url = f"amqps://{creds['username']}:{creds['password']}@{host}:5671"
    parameters = pika.URLParameters(url)
    parameters.ssl_options = pika.SSLOptions(context=ssl_context)

    connection = pika.BlockingConnection(parameters)
    channel = connection.channel()
    props = pika.BasicProperties(app_id=appId)
    for queueName in  event['queues']:
        channel.queue_declare(queue=queueName)
        channel.basic_publish(exchange='', routing_key=queueName, body=messageBody, properties=props)
        print(" [x] Message sent to queue: ", queueName)
    channel.close()
    connection.close()
    return {
        'statusCode': 200,
        'body': json.dumps(f"Posted {len(event['queues'])} messages!")
    }