package cn.timer.api.controller.yggl.service;

import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.timer.api.bean.yggl.YgglMainEmp;
import cn.timer.api.bean.yggl.YgglMainLzb;
import cn.timer.api.bean.zzgl.ZzglBmgwM;
import cn.timer.api.config.enuminterface.YgEnumInterface;
import cn.timer.api.dao.yggl.YgglMainEmpMapper;
import cn.timer.api.dao.zzgl.ZzglBmgwMMapper;
import cn.timer.api.dto.yggl.LzygQueryDto;
import cn.timer.api.dto.yggl.YgzzDto;

@Service
public class YgglServiceImpl implements YgglService {

	@Autowired
	private YgglMainEmpMapper ygglMainEmpMapper;
	
	@Autowired
	private ZzglBmgwMMapper zzglBmgwMMapper;
	
	@Override
	public void applicationResignation(LzygQueryDto lzygQueryDto) {
		// TODO Auto-generated method stub
		Integer empNum = lzygQueryDto.getEmpNum();
		
		QueryWrapper<YgglMainEmp> queryWrapper = new QueryWrapper<YgglMainEmp>();
		queryWrapper.eq("emp_num", empNum).eq("org_code", lzygQueryDto.getOrgCode());
		YgglMainEmp ygglMainEmp = YgglMainEmp.builder().build().selectOne(queryWrapper);
		YgglMainLzb ygglMainLzb = YgglMainLzb.builder().empNum(lzygQueryDto.getEmpNum()).build();
		// 移动员工表数据到离职表
		BeanUtil.copyProperties(ygglMainEmp, ygglMainLzb);
		ygglMainLzb.insert();

		UpdateWrapper<YgglMainEmp> updateWrapper = new UpdateWrapper<YgglMainEmp>();
		updateWrapper.eq("emp_num", empNum);
		UpdateWrapper<YgglMainLzb> updateWrapper1 = new UpdateWrapper<YgglMainLzb>();
		updateWrapper1.eq("emp_num", empNum);
		YgglMainEmp.builder().empNum(lzygQueryDto.getEmpNum()).jobStatus(YgEnumInterface.jobStatus.YILIZHI.getType()).build().update(updateWrapper);
		YgglMainLzb.builder().jobStatus(YgEnumInterface.jobStatus.LIZHIZHONG.getType()).lzTime(lzygQueryDto.getLzTime())
				.lzyy(lzygQueryDto.getLzyy()).lzbz(lzygQueryDto.getLzbz()).build().update(updateWrapper1);
	}

	@Override
	public void applicationRegularization(YgzzDto ygzzDto) {
		// TODO Auto-generated method stub
		YgglMainEmp.builder()
		.jobStatus(2)
		.zzTime(ygzzDto.getZzTime())
		.sjzzTime(new Date())
		.zzRemark(ygzzDto.getZzRemark())
		.build().update(new UpdateWrapper<YgglMainEmp>().lambda().eq(YgglMainEmp::getEmpNum, ygzzDto.getEmpNum()));
	}

	@Override
	public Integer selectLeaderEmpNumById(Integer orgCode, Integer id, Integer leave) {
		// TODO Auto-generated method stub
		YgglMainEmp mainEmp = ygglMainEmpMapper.selectOne(new QueryWrapper<YgglMainEmp>().lambda()
				.select(YgglMainEmp::getBmgwId)
				.eq(YgglMainEmp::getEmpNum, id));
		Integer gWId = mainEmp != null ? mainEmp.getBmgwId() : null;
		
		// 企业所有部门岗位
		List<ZzglBmgwM> listBM = zzglBmgwMMapper.selectList(new QueryWrapper<ZzglBmgwM>().lambda()
				.eq(ZzglBmgwM::getOrgCode, orgCode));
		
		// 岗位
		ZzglBmgwM gW = CollUtil.getFirst(listBM.stream().filter(bM -> bM.getId().equals(gWId)).collect(Collectors.toList()));
		
		// 岗位id
		Integer baseBmgwId = gW != null ? gW.getUpId() : null;
		
		// 部门列表
//		List<ZzglBmgwM> listbM = ListUtil.toList();
		// 指定 主管id
		Integer leaderId = null;
		
		for (int i = 0,n = leave; i < n; i++) {
			ZzglBmgwM bmgwM = getLeaderEmp(listBM, baseBmgwId);
			baseBmgwId = bmgwM != null ? bmgwM.getId() : null;
			if (i == n-1) {
//				listbM.add(bmgwM);
				leaderId = baseBmgwId;
			}
		}
		
		return leaderId;
	}
	
	private ZzglBmgwM getLeaderEmp(List<ZzglBmgwM> listBM, Integer baseBmgwId) {
		ZzglBmgwM zzglBmgwM =  baseBmgwId != null ? 
				CollUtil.getFirst(listBM.stream()
						.filter(bM -> bM.getId().equals(baseBmgwId)).collect(Collectors.toList()))
				: null;
		
		return zzglBmgwM;
		
	}
	

}