from flask import current_app, jsonify, request
from flask_restful import Resource
from flask_restful.reqparse import RequestParser
from flask_jwt_extended import ( jwt_required, get_jwt_identity )
from application.signal_manager import signalManager
from models.app import  postAppSchema, deleteAppSchema, getListAppSchema, getListAppsSchema, getAppSchema, putAppSchema
from webcreator.log import logger
from webcreator.response import ResponseCode, response_result

class AppResourceList(Resource):
    def __init__(self):
        pass
        # 特殊参数，即不是从json获取参数的接口，可以将这个注释打开
        # self.parser = RequestParser()

    def get(self):
        # 特殊参数，即不是从json获取参数的接口，可以将这个注释打开
        # self.parser.add_argument("page", type=int, location="args", default=1)
        # self.parser.add_argument("pageSize", type=int, location="args", default=15)
        # args = self.parser.parse_args()

        try:
            json_payload = request.json
            logger.warn(json_payload)
            data = getListAppSchema.load(json_payload)
            result = signalManager.actionGetListApp.emit(data)
            json_dumps = getListAppSchema.dump(result)
            if result:
                json_dumps = getListAppsSchema.dump(result.items)
                logger.warn(json_dumps)
                return response_result(ResponseCode.HTTP_SUCCESS, data=json_dumps, count=result.total)
            return response_result(ResponseCode.HTTP_NOT_FOUND)
        except Exception as e:
            current_app.logger.error(e)
            return response_result(ResponseCode.HTTP_SERVER_ERROR)

    @jwt_required(locations=["headers"])
    def post(self):
        try:
            json_payload = request.json
            data = postAppSchema.load(json_payload)
            result, message = signalManager.actionPostApp.emit(data)
            if result:
                logger.warn(result)
                return response_result(ResponseCode.HTTP_SUCCESS, data=result, msg=message)
            return response_result(ResponseCode.HTTP_NOT_FOUND)
        except Exception as e:
            current_app.logger.error(e)
            return response_result(ResponseCode.HTTP_SERVER_ERROR)


class AppResource(Resource):
    def __init__(self):
        pass
        # 特殊参数，即不是从json获取参数的接口，可以将这个注释打开
        # self.parser = RequestParser()

    @jwt_required(locations=["headers"])
    def get(self, uuid):
        # 特殊参数，即不是从json获取参数的接口，可以将这个注释打开
        # self.parser.add_argument("page", type=int, location="args", default=1)
        # self.parser.add_argument("pageSize", type=int, location="args", default=15)
        # args = self.parser.parse_args()

        try:
            json_payload = request.json
            print("========>", uuid, json_payload)
            data = getAppSchema.load(json_payload)
            result, message = signalManager.actionGetApp.emit(uuid, data)
            if result:
                json_dumps = getAppSchema.dump(result)
                return response_result(ResponseCode.HTTP_SUCCESS, data=json_dumps, msg=message)
            return response_result(ResponseCode.HTTP_NOT_FOUND)
        except Exception as e:
            current_app.logger.error(e)
            return response_result(ResponseCode.HTTP_SERVER_ERROR)


    @jwt_required(locations=["headers"])
    def put(self, uuid):
        try:
            json_payload = request.json
            print("========>", uuid, json_payload)
            data = putAppSchema.load(json_payload)
            result, message = signalManager.actionPutApp.emit(uuid, data)
            if result:
                return response_result(ResponseCode.HTTP_SUCCESS, data=result, msg=message)
            return response_result(ResponseCode.HTTP_NO_CHANGE, msg=message)
        except Exception as e:
            current_app.logger.error(e)
            return response_result(ResponseCode.HTTP_SERVER_ERROR)


    @jwt_required(locations=["headers"])
    def delete(self, uuid):
        try:
            json_payload = request.json
            print("========>", uuid, json_payload)
            # data = deleteAppSchema.load(json_payload)
            result, message = signalManager.actionDeleteApp.emit(uuid)
            if result:
                return response_result(ResponseCode.HTTP_SUCCESS, data=result, msg=message)
            return response_result(ResponseCode.HTTP_NOT_FOUND, msg=message)
        except Exception as e:
            current_app.logger.error(e)
            return response_result(ResponseCode.HTTP_SERVER_ERROR)
