'''

数据字典模块api

'''

from flask import jsonify, request

from flask import Blueprint

from utils.auth import validate_user, validate_permissions

from utils.web_utils import get_req_para, validate_params

from utils.common_utils import gen_json_response

from web_apps.dictionary.services import DictService, DictItemService

dict_bp = Blueprint('dict', __name__)





@dict_bp.route('/list', methods=['GET'])

@validate_user

def dict_list():

    """

    字典列表

    """

    req_dict = get_req_para(request)

    print(req_dict)

    res_data = DictService().get_obj_list(req_dict)

    return jsonify(res_data)





@dict_bp.route('/add', methods=['POST'])

@validate_user

@validate_permissions(['system:dict:add'])

def dict_add():

    """

    添加

    """

    req_dict = get_req_para(request)

    print(req_dict)

    verify_dict = {

        'dict_name': {

            'name': '字典名',

            'not_empty': True,

        },

        'dict_code': {

            'name': '字典值',

            'not_empty': True,

        }

    }

    not_valid = validate_params(req_dict, verify_dict)

    if not_valid:

        return gen_json_response(code=400, msg=not_valid)

    res_data = DictService().add_obj(req_dict)

    return jsonify(res_data)





@dict_bp.route('/edit', methods=['POST'])

@validate_user

@validate_permissions(['system:dict:edit'])

def dict_edit():

    """

    更新字典

    """

    req_dict = get_req_para(request)

    print(req_dict)

    verify_dict = {

        'dict_name': {

            'name': '字典名',

            'not_empty': True,

        },

        'dict_code': {

            'name': '字典值',

            'not_empty': True,

        }

    }

    not_valid = validate_params(req_dict, verify_dict)

    if not_valid:

        return gen_json_response(code=400, msg=not_valid)

    res_data = DictService().update_obj(req_dict)

    return jsonify(res_data)





@dict_bp.route('/delete', methods=['POST', 'DELETE'])

@validate_user

@validate_permissions(['system:dict:delete'])

def dict_delete():

    """

    删除

    """

    req_dict = get_req_para(request)

    print(req_dict)

    res_data = DictService().delete_obj(req_dict)

    return jsonify(res_data)





@dict_bp.route('/deleteList', methods=['GET'])

@validate_user

def dict_delete_list():

    """

    字典回收站列表

    """

    req_dict = get_req_para(request)

    print(req_dict)

    res_data = DictService().get_delete_list(req_dict)

    return jsonify(res_data)





@dict_bp.route('/deletePhysic', methods=['DELETE'])

@validate_user

@validate_permissions(['system:dict:recycle'])

def dict_delete_physic():

    """

    字典真实删除

    """

    req_dict = get_req_para(request)

    print(req_dict)

    res_data = DictService().delete_physic(req_dict)

    return jsonify(res_data)





@dict_bp.route('/back', methods=['PUT'])

@validate_user

def dict_delete_back():

    """

    字典恢复

    """

    req_dict = get_req_para(request)

    print(req_dict)

    res_data = DictService().delete_back(req_dict)

    return jsonify(res_data)





@dict_bp.route('/queryAllDictItems', methods=['GET'])

@validate_user

def get_dict_all_items():

    """

    所有系统字典列表

    """

    req_dict = get_req_para(request)

    print(req_dict)

    all_dict_items = DictService().get_obj_all_items(req_dict)

    return jsonify(gen_json_response(data=all_dict_items))





@dict_bp.route('/refreshCache', methods=['GET'])

@validate_user

@validate_permissions(['system:dict:refresh'])

def get_dict_reflesh_cache():

    """

    刷新系统字典列表缓存

    """

    req_dict = get_req_para(request)

    print(req_dict)

    all_dict_items = DictService().get_obj_all_items({'use_cache': False})

    return jsonify(gen_json_response(data=all_dict_items, extends={'success': True}))





@dict_bp.route('/getDictItems/<dict_code>', methods=['GET'])

@validate_user

def get_dict_items(dict_code):

    """

    查询字典项

    """

    req_dict = {'dict_code': dict_code}

    print(req_dict)

    res_data = DictItemService().get_dict_items(req_dict)

    return jsonify(res_data)





@dict_bp.route('/loadDictItem/<dict_code>', methods=['GET'])

@validate_user

def load_dict_items(dict_code):

    """

    加载字典项(带搜索)

    """

    req_dict = {'dict_code': dict_code}

    print(req_dict)

    req_dic = get_req_para(request)

    print(req_dic)

    req_dict['key'] = req_dic.get('key')

    res_data = DictItemService().get_dict_items(req_dict)

    return jsonify(res_data)





@dict_bp.route('/item/list', methods=['GET'])

@validate_user

def dict_item_list():

    """

    字典详情列表

    """

    req_dict = get_req_para(request)

    print(req_dict)

    res_data = DictItemService().get_obj_list(req_dict)

    return jsonify(res_data)





@dict_bp.route('/item/add', methods=['POST'])

@validate_user

@validate_permissions(['system:dict:item:add'])

def dict_item_add():

    """

    添加

    """

    req_dict = get_req_para(request)

    print(req_dict)

    verify_dict = {

        'dict_id': {

            'name': '字典id',

            'not_empty': True,

        },

        'name': {

            'name': '名称',

            'not_empty': True,

        },

        'value': {

            'name': '值',

            'not_empty': True,

        }

    }

    not_valid = validate_params(req_dict, verify_dict)

    if not_valid:

        return gen_json_response(code=400, msg=not_valid)

    res_data = DictItemService().add_obj(req_dict)

    return jsonify(res_data)





@dict_bp.route('/item/edit', methods=['POST'])

@validate_user

@validate_permissions(['system:dict:item:edit'])

def dict_item_edit():

    """

    更新字典项

    """

    req_dict = get_req_para(request)

    print(req_dict)

    verify_dict = {

        'name': {

            'name': '名称',

            'not_empty': True,

        },

        'value': {

            'name': '值',

            'not_empty': True,

        }

    }

    not_valid = validate_params(req_dict, verify_dict)

    if not_valid:

        return gen_json_response(code=400, msg=not_valid)

    res_data = DictItemService().update_obj(req_dict)

    return jsonify(res_data)





@dict_bp.route('/item/delete', methods=['POST', 'DELETE'])

@validate_user

@validate_permissions(['system:dict:item:delete'])

def dict_item_delete():

    """

    删除

    """

    req_dict = get_req_para(request)

    print(req_dict)

    res_data = DictItemService().delete_obj(req_dict)

    return jsonify(res_data)