import json
from flask_restful import request, abort
from marshmallow import Schema, fields
import pika
from endpoints.auth_resource import AuthResource


class NotifySchema(Schema):
    body = fields.Str(required=True)

class Notify(AuthResource):
    clients = None
    schema = None

    def __init__(self):
        super().__init__()
        self.schema = NotifySchema()
   
    def post(self):
        args = request.get_json()
        errors = self.schema.validate(args)
        if errors:
            abort(400, message=str(errors))

        allow = False
        body = args.get("body")
        message = {
            'topic': 'broadcast',
            'message': body,
        }

        allow = self.auth(request)
        
        if allow:
            notify_queue = self.client['client_id'] + "-broadcast"
            connection = pika.BlockingConnection(pika.ConnectionParameters(host="localhost"))
            channel = connection.channel()
            channel.queue_declare(queue=notify_queue, durable=True)
            channel.basic_publish(exchange="", routing_key=notify_queue, body=json.dumps(message))
            connection.close()