import json

from flask_restful import abort, request
from marshmallow import Schema, fields

from endpoints.auth_resource import AuthResource
from rmq import write_to_queue


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


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

    def __init__(self):
        super().__init__()
        self.schema = SendSchema()

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

        allow = self.auth(request)

        if allow:
            body = args.get("body")
            topic = args.get("topic")
            outbox_queue = self.client["client_id"] + "-outbox"
            message = {
                "topic": topic,
                "message": body,
            }

            write_to_queue(queue_name=outbox_queue, msg=json.dumps(message))