package org.stm.page.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.util.oConvertUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import org.stm.my.entity.MyTask;
import org.stm.my.service.IMyTaskService;
import org.stm.page.entity.PageTitleconfig;
import org.stm.page.service.IPageTitleconfigService;
import org.stm.rectify.assin.entity.StProblemTaskAssin;
import org.stm.rectify.assin.service.IStProblemTaskAssinService;
import org.stm.rectify.plan.entity.StRectifyPlan;
import org.stm.rectify.plan.service.IStRectifyPlanService;
import org.stm.rectify.plan.vo.StRectifyPlanVo;
import org.stm.utils.UserUtil;

import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


@Api(tags = "首页配置")
@RestController
@RequestMapping("/page/pageTitleconfig")
@Slf4j
public class PageTitleconfigController extends JeecgController<PageTitleconfig, IPageTitleconfigService> {
    @Autowired
    private IPageTitleconfigService pageTitleconfigService;


    @Autowired
    private IStRectifyPlanService stRectifyPlanService;



    @Autowired
    private IMyTaskService myTaskService;

    @Autowired
    private IStProblemTaskAssinService stProblemTaskAssinService;

    @ApiOperation(value = "首页配置-分页列表查询", notes = "首页配置-分页列表查询")
    @GetMapping(value = "/list")
    public Result<IPage<PageTitleconfig>> queryPageList(PageTitleconfig pageTitleconfig,
                                                        @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
                                                        @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
                                                        HttpServletRequest req) {
        QueryWrapper<PageTitleconfig> queryWrapper = QueryGenerator.initQueryWrapper(pageTitleconfig, req.getParameterMap());
        Page<PageTitleconfig> page = new Page<PageTitleconfig>(pageNo, pageSize);
        IPage<PageTitleconfig> pageList = pageTitleconfigService.page(page, queryWrapper);
        return Result.OK(pageList);
    }

    @ApiOperation(value = "首页配置-添加", notes = "首页配置-添加")
    @PostMapping(value = "/add")
    public Result<String> add(@RequestBody PageTitleconfig pageTitle) {
        Integer dtId = pageTitle.getTplItemDtId();
        if(dtId!=null) {
            String chkResult = queryExist(dtId,null,true);
            if (chkResult != null) {
                return Result.OK(chkResult);
            }
            //setOtherValue(pageTitle);
        }

        pageTitleconfigService.save(pageTitle);
        return Result.OK("添加成功！");
    }

    @ApiOperation(value = "首页配置-编辑", notes = "首页配置-编辑")
    @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
    public Result<String> edit(@RequestBody PageTitleconfig pageTitle) {
        Integer dtId = pageTitle.getTplItemDtId();
        if(dtId!=null) {
            String chkResult = queryExist(dtId,pageTitle.getId(),false);
            if(chkResult!=null) {
                return Result.OK(chkResult);
            }
            //setOtherValue(pageTitle);
        }

        pageTitleconfigService.updateById(pageTitle);
        return Result.OK("更新标题配置成功!");
    }

    @DeleteMapping(value = "/delete")
    public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
        pageTitleconfigService.removeById(id);
        return Result.OK("删除成功!");
    }

    @ApiOperation(value = "首页配置-通过id查询", notes = "首页配置-通过id查询")
    @GetMapping(value = "/queryById")
    public Result<PageTitleconfig> queryById(@RequestParam(name = "id", required = true) String id) {
        PageTitleconfig pageTitleconfig = pageTitleconfigService.getById(id);
        if (pageTitleconfig == null) {
            return Result.error("未找到对应数据");
        }
        return Result.OK(pageTitleconfig);
    }



    @ApiOperation(value = "首页配置-待办任务查询", notes = "首页配置-待办任务查询")
    @GetMapping(value = "/getMyTask")
    public Result<List> getMyTask() {
        //获取待办事项列表，待审批和待填报
        QueryWrapper<MyTask> queryWrapper = new QueryWrapper();
        String userId = UserUtil.getUserId();
        queryWrapper.eq("sta",0).eq("uid",userId).orderByDesc("priority").orderByDesc("st_time");
        queryWrapper.last("limit 5");
        List<MyTask> list = myTaskService.list(queryWrapper);
        return Result.OK(list);
    }



    /**
     *
     * @return
     */
//    @GetMapping(value = "/getNeedDealt")
//    public Result<List> getNeedDealt() {
//        QueryWrapper<StProblemTaskAssin> queryWrapper =  new QueryWrapper<>();
//        String userCode = UserUtil.getUserCode();
//        queryWrapper.eq("HEAD_CODE",userCode).eq("receive_status",0);
//        List<StProblemTaskAssin> assignList = stProblemTaskAssinService.list(queryWrapper.last("LIMIT 5"));
//        StRectifyPlan stRectifyPlan=new StRectifyPlan();
//        stRectifyPlan.setApproveFlag("1");
//        stRectifyPlan.setApproveUser(userCode);
//        QueryWrapper<StRectifyPlan> queryPlanWrapper =  new QueryWrapper<>();
//        queryPlanWrapper.eq("approve_user",userCode).eq("approve_flag",1);
//        List<StRectifyPlan> approveList = stRectifyPlanService.list(queryPlanWrapper.last("LIMIT 5"));
//
//        return Result.OK(assignList);
//    }

    @GetMapping(value = "/getBaseInfoList")
    public Result<Map<Integer,List<PageTitleconfig>>> getBaseInfoList() {
        QueryWrapper<PageTitleconfig> queryWrapperCfg = new QueryWrapper<>();
        queryWrapperCfg.orderByAsc("show_sort");
        List<PageTitleconfig> pageList = pageTitleconfigService.list(queryWrapperCfg);
        Map<Integer,List<PageTitleconfig>> retMap = new HashMap<>();
        List<PageTitleconfig> orgList = new ArrayList<>();
        List<PageTitleconfig> techList = new ArrayList<>();

        List<Map<String, String>> retList = new ArrayList<>();
        if(pageList!=null && pageList.size()!=0) {
            List<Map<String,Object>> listData =pageTitleconfigService.getFirstPageFxcStat();
            Map<Integer,String> tmpMap = new HashMap<>();
            for (Map<String,Object> cnt : listData) {
                Integer dtId = Integer.valueOf(cnt.get("itemid").toString());
                if (tmpMap.get(dtId) != null) {
                    continue;
                }
                if(cnt.get("content")!=null){
                    tmpMap.put(dtId, cnt.get("content").toString());
                }
            }
            for(PageTitleconfig cfg:pageList) {
                Integer dtId = cfg.getTplItemDtId();
                String val = tmpMap.get(dtId);
                if(val!=null&&!val.equals("null")) {
                    cfg.setDefaultVal(val);
                }
                if(cfg.getTp().intValue()==1) {
                    orgList.add(cfg);
                } else {
                    techList.add(cfg);
                }
            }
        }
        retMap.put(1,orgList);
        retMap.put(2,techList);
        return Result.OK(retMap);
    }

    @RequestMapping(value = "/queryFxcTplTree", method = RequestMethod.GET)
//    public Result<List<FxcTplItemTree>> queryFxcTplTree() {
//        Map<Integer,List<FxcTplItemTree>> mapDt =  getFxcTplItemDtMap();
//        QueryWrapper<FxcTpl> queryWrapper = new QueryWrapper();
//        queryWrapper.eq("tp",1);
//        List<FxcTpl> fxcTplList = fxcTplService.list(queryWrapper);
//        List<FxcTplItem> tplItemList = fxcTplItemService.list();
//        List<FxcTplItemTree>  tplItemTreeList = new ArrayList<>();
//        getTreeList(tplItemTreeList,tplItemList,mapDt,null);
//
//        List<FxcTplItemTree> retList = new ArrayList<>();
//        for(int i=0;i< fxcTplList.size();i++) {
//            FxcTpl fxcTpl = fxcTplList.get(i);
//            FxcTplItemTree treeModel = new FxcTplItemTree();
//            treeModel.setTitle(fxcTpl.getNm());
//            List<FxcTplItemTree> children =  new ArrayList<>();
//            for(int j=0;j<tplItemTreeList.size();j++) {
//                FxcTplItemTree item = tplItemTreeList.get(j);
//                if(item.getTplid()== fxcTpl.getId().intValue()) {
//                    item.setLeaf(false);
//                    children.add(item);
//                }
//            }
//            if(children.size()>0) {
//                treeModel.setChildren(children);
//                treeModel.setLeaf(false);
//            } else {
//                treeModel.setLeaf(true);
//            }
//            treeModel.setKey(fxcTpl.getId().toString());
//            treeModel.setPid(0);
//            treeModel.setId(fxcTpl.getId());
//
//            retList.add(treeModel);
//        }
//        return Result.OK(retList);
//    }



//    private void getTreeList(List<FxcTplItemTree> treeList, List<FxcTplItem> metaList,  Map<Integer,List<FxcTplItemTree>> mapDt,FxcTplItemTree temp) {
//        for (FxcTplItem item : metaList) {
//            List<FxcTplItemTree> dtList = mapDt.get(item.getId());
//            Integer tempPid = item.getPid();
//            if (temp == null && oConvertUtils.isEmpty(tempPid)) {
//                FxcTplItemTree fxcTplItemTree = setFxcTplItemTree(item,true,2);
//                if(dtList!=null&&dtList.size()>0){
//                    fxcTplItemTree.setChildren(dtList);
//                }
//                treeList.add(fxcTplItemTree);
//                getTreeList(treeList, metaList, mapDt,fxcTplItemTree);
//            } else if (temp != null && tempPid != null && tempPid.equals(temp.getId())) {
//                FxcTplItemTree fxcTplItemTree = setFxcTplItemTree(item,true,2);
//                if(dtList!=null&&dtList.size()>0){
//                    fxcTplItemTree.setChildren(dtList);
//                }
//                if(temp.getChildren()==null){
//                    temp.setChildren(new ArrayList<FxcTplItemTree>());
//                }
//                temp.getChildren().add(fxcTplItemTree);
//                getTreeList(treeList, metaList,mapDt,fxcTplItemTree);
//            }
//
//        }
//    }
//
//    private FxcTplItemTree setFxcTplItemTree(FxcTplItem fxcTplItem,Boolean isLeaf,int tp) {
//        FxcTplItemTree fxcTplItemTree = new FxcTplItemTree();
//        fxcTplItemTree.setId(fxcTplItem.getId());
//        fxcTplItemTree.setKey(fxcTplItem.getId().toString());
//        if(fxcTplItem.getPid()!=null) {
//            fxcTplItemTree.setPid(fxcTplItem.getPid());
//        } else {
//            fxcTplItemTree.setPid(0);
//        }
//        fxcTplItemTree.setTitle(fxcTplItem.getTitle());
//        fxcTplItemTree.setLeaf(isLeaf);
//        fxcTplItemTree.setTplid(fxcTplItem.getTplid());
//        fxcTplItemTree.setTp(tp);
//        return fxcTplItemTree;
//    }
//
//    private  Map<Integer,List<FxcTplItemTree>> getFxcTplItemDtMap() {
//        QueryWrapper<FxcTplItemDt> queryWrapper = new QueryWrapper<>();
//        queryWrapper.eq("otp",1);
//        List<FxcTplItemDt> list = fxcTplItemDtService.list(queryWrapper);
//        Map<Integer,List<FxcTplItemTree>> tmpMap = new HashMap<>();
//
//        for(FxcTplItemDt dt : list) {
//            FxcTplItemTree treeNode = new FxcTplItemTree();
//            treeNode.setKey(dt.getId().toString());
//            treeNode.setTitle(dt.getNm()+"["+dt.getUnit()+"]");
//            treeNode.setId(dt.getId());
//            treeNode.setLeaf(true);
//            treeNode.setTp(3);
//            treeNode.setPid(dt.getItemid());
//            List<FxcTplItemTree> tmpList = tmpMap.get(dt.getItemid());
//            if(tmpList==null){
//                tmpList = new ArrayList<>();
//            }
//            tmpList.add(treeNode);
//            tmpMap.put(dt.getItemid(),tmpList);
//        }
//        return  tmpMap;
//    }
//
//    private FxcTplItem queryTplItemById(int itemId) {
//        FxcTplItem  fxcTplItem = fxcTplItemService.getById(itemId);
//        return fxcTplItem;
//    }
//    private FxcTplItemDt queryTplItemDtById(int itemDtId) {
//        FxcTplItemDt  fxcTplItemDt = fxcTplItemDtService.getById(itemDtId);
//        return fxcTplItemDt;
//    }
//    private FxcTpl queryTplById(int tplId) {
//        FxcTpl  fxcTpl = fxcTplService.getById(tplId);
//        return fxcTpl;
//    }

    private String  queryExist(Integer dtId,Integer id,boolean isAdd) {
        List<PageTitleconfig> list = pageTitleconfigService.list();
//        if(isAdd && list.size()>7){
//            return "记录数最大" + list.size()+"条，添加失败";
//        }
        if (list != null && list.size() > 0) {
            for(PageTitleconfig cfg : list) {
                if(cfg.getTplItemDtId().intValue()==dtId.intValue()){
                    if(id==null) {
                        return "该配置项目已经存在，不能重复添加！";
                    } else {
                        if(id.intValue()!=cfg.getId().intValue()){
                            return "该配置项目已经存在，不能重复添加！";
                        }
                    }

                }
            }
        }
        return null;
    }
//
//    private void setOtherValue(PageTitleconfig pageTitle){
//        Integer dtId = pageTitle.getTplItemDtId();
//        FxcTplItemDt fxcTplItemDt = queryTplItemDtById(dtId);
//        FxcTplItem fxcTplItem = queryTplItemById(fxcTplItemDt.getItemid());
//        FxcTpl fxcTpl = queryTplById(fxcTplItem.getTplid());
//        pageTitle.setTplItemId(fxcTplItem.getId());
//        pageTitle.setTplItemDtId(fxcTplItemDt.getId());
//        pageTitle.setTplId(fxcTplItem.getTplid());
//        pageTitle.setItemDtName(fxcTplItemDt.getNm());
//        pageTitle.setTplItemName(fxcTplItem.getTitle());
//        pageTitle.setTplName(fxcTpl.getNm());
//        if(fxcTplItemDt.getUnit()!=null) {
//            pageTitle.setUnit(fxcTplItemDt.getUnit());
//        }
//    }

}
