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 com.example.his.api.common.result.R;
import com.example.his.api.mis.service.DeptService;
import com.example.his.api.req.MisDept.DeptDeleteReq;
import com.example.his.api.req.MisDept.DeptEditReq;
import com.example.his.api.req.MisDept.DeptSearchReq;
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 DeptController {
    @Resource
    private DeptService deptService;

    /**
     * 部门列表查询
     * 部门列表查询id
     * 部门列表新增
     * 部门列表更新
     * 部门列表删除
     * 部门列表批量删除
     */
    @GetMapping("/dept/searchAllDept")
    @SaCheckPermission(value = {"ORGANIZE:DEPT","ORGANIZE:DEPT:SELECT"}, mode = SaMode.OR)
    public R searchAllDept() {
        ArrayList<HashMap> list = deptService.searchAllDept();
        return R.success(list);
    }

    @PostMapping("/dept/searchDept")
    @SaCheckPermission(value = {"ORGANIZE:DEPT","ORGANIZE:DEPT:SELECT"}, mode = SaMode.OR)
    public R searchDept(@Valid @RequestBody DeptSearchReq deptSearchReq) {
        Map param = BeanUtil.beanToMap(deptSearchReq);
        PageInfo<HashMap> list = deptService.searchDept(param);
        return R.success(list);
    }

    @GetMapping("/dept/searchDeptById")
    @SaCheckPermission(value = {"ORGANIZE:DEPT","ORGANIZE:DEPT:SELECT"}, mode = SaMode.OR)
    public R searchDeptById(@RequestParam(value = "id") Integer id) {
        HashMap map = deptService.searchDeptById(id);
        if(ObjectUtil.isEmpty(map)) {
            return R.success("200","id不存在");
        }
        return R.success(map);
    }

    @PostMapping("/dept/editDept")
    @SaCheckPermission(value = {"ORGANIZE:DEPT","ORGANIZE:DEPT:UPDATE","ORGANIZE:DEPT:INSERT"}, mode = SaMode.OR)
    public R insertDept(@Valid @RequestBody DeptEditReq deptEditReq) {
        Map param = BeanUtil.beanToMap(deptEditReq);
        if(ObjectUtil.isEmpty(deptEditReq.getId())) {
            deptService.insertDept(param);
        }else {
            deptService.updateDept(param);
        }
        return R.success();
    }

    @GetMapping("/dept/deleteDeptById")
    @SaCheckPermission(value = {"ORGANIZE:DEPT","ORGANIZE:DEPT:DELETE"}, mode = SaMode.OR)
    public R deleteDeptById(@RequestParam(value = "id") Integer id) {
        int rows = deptService.deleteDept(id);
        return rows > 0 ? R.success(rows) : R.success("200","id不存在");
    }

    @PostMapping("/dept/deleteBatchDept")
    @SaCheckPermission(value = {"ORGANIZE:DEPT","ORGANIZE:DEPT:DELETE"}, mode = SaMode.OR)
    public R deleteBatchDept(@Valid @RequestBody DeptDeleteReq deptDeleteReq) {
        Map param = BeanUtil.beanToMap(deptDeleteReq);
        deptService.deleteBatchDept(param);
        return R.success();
    }
}

