package com.xhkjedu.sapi.controller.system;

import com.xhkjedu.annotation.Action;
import com.xhkjedu.sapi.model.system.TModule;
import com.xhkjedu.sapi.service.system.ModuleService;
import com.xhkjedu.utils.N_Utils;
import com.xhkjedu.vo.ResultVo;
import com.xhkjedu.sapi.vo.system.ModuleSelVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import java.util.Map;


/**
 * @ClassName ModuleController
 * Description TODO
 * Author WN
 * Date 2020/6/11 16:24
 **/
@RequestMapping("module")
@RestController
public class ModuleController {
    @Autowired
    private ModuleService moduleService;

    /**
     *功能描述 列表
     * @author WN
     * @date 2020/6/11
     * @param  * @param module
     * @return com.xhkjedu.vo.ResultVo
     */
    @PostMapping("/list")
    public ResultVo listModules(@RequestBody TModule module){
        N_Utils.validation(new Object[]{module.getSchoolid(),"学校id",1,module.getBelong(),"模块归属",1});
        List<TModule> lst = moduleService.listModules(module);
        return new ResultVo(0,"获取应用集合成功",lst);
    }

    @PostMapping("/list2")
    public ResultVo listModules2(@RequestBody TModule module){
        N_Utils.validation(new Object[]{module.getSchoolid(),"学校id",1,module.getBelong(),"模块归属",1});
        List<TModule> lst = moduleService.listModules(module);
        return new ResultVo(0,"获取应用集合成功",lst);
    }

    //学生网页端模块获取
    @PostMapping("/list_stu")
    public ResultVo listStuModules(@RequestBody TModule module){
        N_Utils.validation(new Object[]{module.getSchoolid(),"学校id",1,module.getBelong(),"模块归属",1});
        module.setDisplay(1);
        List<TModule> lst = moduleService.listModules(module);
        return new ResultVo(0,"获取应用集合成功",lst);
    }

    /**
     *功能描述 所有模块树形结构 (主要用于学生平板获取权限、角色设置时获取所有)
     * @author WN
     * @date 2020/6/15
     * @param  * @param module
     * @return com.xhkjedu.vo.ResultVo
     */
    @PostMapping("/treelst")
    public ResultVo listTree(@RequestBody TModule module){
        //2023-06-25兼容现有app未更改字段  module.getModuletype(),"模块归属",1 ;
        N_Utils.validation(new Object[]{module.getSchoolid(),"学校id",1});
        module.setDisplay(1);

        if(N_Utils.isEmpty(module.getBelong())){
            //代表是学生平板获取权限，兼容app未更改
            module.setBelong(2);
            module.setBelongcode(2);
        }

        List<TModule> lst = moduleService.listModulesTree(module);
        return new ResultVo(0,"获取应用集合成功",lst);
    }


    /**
     *功能描述 保存
     * @author WN
     * @date 2020/6/11
     * @param  * @param module
     * @return com.xhkjedu.vo.ResultVo
     */
    @PostMapping("/add")
    @Action("学校模块-增加")
    public ResultVo add(@RequestBody TModule module){
        N_Utils.validation(new Object[]{
                module.getModulename(),"应用名称",2,
                module.getMinout(),"应用分类",1,
                module.getMclass(),"应用分组",1,
                module.getSchoolid(),"学校id",1,
                module.getBelong(),"模块归属",1
        });
        if(module.getLevel() == 2){
            N_Utils.validation(new Object[]{module.getBelongcode(),"模块归属码",1 });
        }
        int result = moduleService.add(module);
        if (result > 0) {
            return new ResultVo(0, "保存成功");
        }else{
            return new ResultVo(1, "保存失败");
        }
    }

    /**
     *功能描述 修改
     * @author WN
     * @date 2020/6/11
     * @param  * @param module
     * @return com.xhkjedu.vo.ResultVo
     */
    @PostMapping("/up")
    @Action("学校模块-修改")
    public ResultVo update(@RequestBody TModule module){
        N_Utils.validation(new Object[]{
                module.getModuleid(),"应用id",1,
                module.getModulename(),"应用名称",2
        });
        int result = moduleService.update(module);
        if (result > 0) return new ResultVo(0,"修改成功");
        else return new ResultVo(1,"修改失败");
    }

    /**
     *功能描述  删除
     * @author WN
     * @date 2020/6/11
     * @param  * @param module
     * @return com.xhkjedu.vo.ResultVo
     */
    @PostMapping("/del")
    @Action("学校模块-删除")
    public ResultVo del(@RequestBody TModule module) {
        if (N_Utils.isEmpty(module.getModuleid()))
            return new ResultVo(1,"未选择删除的应用");
        int result = moduleService.del(module.getModuleid());
        if (result > 0) return new ResultVo(0,"删除成功");
        else return new ResultVo(1,"删除失败");
    }

    /**
     *功能描述  首层模块
     * @author WN
     * @date 2020/6/15
     * @param  * @param module
     * @return com.xhkjedu.vo.ResultVo
     */
    @PostMapping("/listsel")
    public ResultVo listForSel(@RequestBody TModule module){
        N_Utils.validation(new Object[]{module.getSchoolid(),"学校id",1,module.getBelong(),"模块归属",1});
        List<ModuleSelVo> lst = moduleService.listLevelModule(module.getSchoolid(),module.getBelong());
        return new ResultVo(0,"获取一级应用成功",lst);
    }

    @PostMapping("/move_up")
    @Action("学校模块-移动")
    public ResultVo moveUp(@RequestBody List<TModule> modules){
        if (N_Utils.isListEmpty(modules)) {
            return new ResultVo(1,"要移动的模块信息不能为空");
        }
        moduleService.moveUp(modules);
        return new ResultVo(0,"上移成功");
    }

    @PostMapping("/listsel2")
    public ResultVo listForSel2(@RequestBody TModule module){
        Integer schoolid = module.getSchoolid();
        Integer belong = module.getBelong();
        N_Utils.validation(new Object[]{schoolid,"学校id",1,belong,"模块归属",1});
        List<Map> list = moduleService.listForSel2(schoolid, belong,module.getBelongcode());
        return new ResultVo(0,"获取模块选择列表成功", list);
    }

    //设置显示
    @PostMapping("/dis")
    @Action("学校模块-设置显示")
    public ResultVo updateModuleDisplay(@RequestBody TModule module){
        N_Utils.validation(new Object[]{module.getModuleid(),"模块id",2});
        moduleService.updateModuleDisplay(module.getModuleid(),1);
        return new ResultVo(0,"设置模块显示成功");
    }

    //设置模块不显示
    @PostMapping("/nodis")
    @Action("学校模块-设置不显示")
    public ResultVo updateModuleNoDisplay(@RequestBody TModule module){
        N_Utils.validation(new Object[]{module.getModuleid(),"模块id",2});
        moduleService.updateModuleDisplay(module.getModuleid(),10);
        return new ResultVo(0,"设置模块不显示成功");
    }
}
