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

from endpoints.auth_resource import AuthResource
from rmq import read_from_queue


class ReceiveQuerySchema(Schema):
    max_messages = fields.Int(required=False)


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

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

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

        max_messages = request.args.get("max_messages", 10)

        allow = self.auth(request)
        if allow:
            inbox_queue = self.client['client_id'] + "-inbox"
            return read_from_queue(queue_name=inbox_queue, max_msgs=max_messages)