from flask import Flask, request, jsonify
from flask_restful import Resource, Api
from flasgger import Swagger, swag_from

app = Flask(__name__)
app.config['SWAGGER'] = {'title': 'Arithmetic API', 'uiversion': 3}
swagger = Swagger(app)
api = Api(app)

class Add(Resource):
    @swag_from({
        'tags': ['Arithmetic'],
        'responses': {'200': {'description': 'Sum of two numbers'}},
        'parameters': [
            {'in': 'path', 'name': 'num1', 'type': 'number', 'required': True},
            {'in': 'path', 'name': 'num2', 'type': 'number', 'required': True}
        ]
    })
    def get(self, num1, num2):
        return jsonify({"result": num1 + num2})

class Subtract(Resource):
    @swag_from({
        'tags': ['Arithmetic'],
        'responses': {'200': {'description': 'Difference between two numbers'}},
        'parameters': [
            {'in': 'query', 'name': 'num1', 'type': 'number', 'required': True},
            {'in': 'query', 'name': 'num2', 'type': 'number', 'required': True}
        ]
    })
    def get(self):
        num1 = float(request.args.get('num1'))
        num2 = float(request.args.get('num2'))
        return jsonify({"result": num1 - num2})

class Multiply(Resource):
    @swag_from({
        'tags': ['Arithmetic'],
        'responses': {'200': {'description': 'Product of two numbers'}},
        'parameters': [{'in': 'body', 'name': 'body', 'required': True, 'schema': {'type': 'object', 'properties': {'num1': {'type': 'number'}, 'num2': {'type': 'number'}}}}]
    })
    def post(self):
        data = request.get_json()
        num1 = data.get('num1')
        num2 = data.get('num2')
        return jsonify({"result": num1 * num2})

api.add_resource(Add, '/add/<float:num1>/<float:num2>')
api.add_resource(Subtract, '/subtract')
api.add_resource(Multiply, '/multiply')

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5201)
