package com.example.his.api.mis.controller;

import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil;
import com.example.his.api.common.result.R;
import com.example.his.api.mis.service.RoleService;
import com.example.his.api.req.MisRole.RoleDeleteReq;
import com.example.his.api.req.MisRole.RoleEditReq;
import com.example.his.api.req.MisRole.RoleSearchReq;
import com.github.pagehelper.PageInfo;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping("/mis/admin")
public class RoleController {
    @Resource
    private RoleService roleService;

    //角色列表-查询全部
    @GetMapping("/role/searchAllRole")
    @SaCheckPermission(value = {"ORGANIZE:ROLE","ORGANIZE:ROLE:SELECT"}, mode = SaMode.OR)
    public R searchAllRole() {
        ArrayList<HashMap> list = roleService.searchAllRole();
        return R.success(list);
    }

    //角色列表-查询id
    @GetMapping("/role/searchRoleById")
    @SaCheckPermission(value = {"ORGANIZE:ROLE","ORGANIZE:ROLE:SELECT"}, mode = SaMode.OR)
    public R searchRoleById(@RequestParam Integer id) {
        HashMap map = roleService.searchRoleById(id);
        return R.success(map);
    }

    //角色列表-分页查询
    @PostMapping("/role/searchRole")
    @SaCheckPermission(value = {"ORGANIZE:ROLE","ORGANIZE:ROLE:SELECT"}, mode = SaMode.OR)
    public R searchRole(@Valid @RequestBody RoleSearchReq roleSearchReq) {
        Map param = BeanUtil.beanToMap(roleSearchReq);
        PageInfo<HashMap> list = roleService.searchRole(param);
        return R.success(list);
    }

    //角色列表-编辑
    @PostMapping("/role/editRole")
    @SaCheckPermission(value = {"ORGANIZE:ROLE","ORGANIZE:ROLE:UPDATE","ORGANIZE:ROLE:INSERT"}, mode = SaMode.OR)
    public R editRole(@Valid @RequestBody RoleEditReq roleEditReq) {
        Map param = BeanUtil.beanToMap(roleEditReq);
        param.replace("permissions",JSONUtil.parseArray(roleEditReq.getPermissions()).toString());
        param.replace("echo",JSONUtil.parseArray(roleEditReq.getEcho()).toString());
        if(ObjectUtil.isEmpty(roleEditReq.getId())) {
            roleService.insertRole(param);
        }else {
            roleService.updateRole(param);
        }
        return R.success();
    }

    //角色列表-删除
    @GetMapping("/role/deleteRole")
    @SaCheckPermission(value = {"ORGANIZE:ROLE","ORGANIZE:ROLE:DELETE"}, mode = SaMode.OR)
    public R deleteRole(@RequestParam Integer id) {
        roleService.deleteRole(id);
        return R.success();
    }

    //角色列表-批量删除
    @PostMapping("/role/deleteBatchRole")
    @SaCheckPermission(value = {"ORGANIZE:ROLE","ORGANIZE:ROLE:DELETE"}, mode = SaMode.OR)
    public R deleteBatchRole(@RequestBody RoleDeleteReq roleDeleteReq) {
        Map param = BeanUtil.beanToMap(roleDeleteReq);
        roleService.deleteBatchRole(param);
        return R.success();
    }

}
