package cn.timer.api.controller.zpgl.sevice;

import cn.timer.api.bean.clazz.SysRegion;
import cn.timer.api.bean.yggl.YgglMainEmp;
import cn.timer.api.bean.zpgl.ZpglFail;
import cn.timer.api.bean.zpgl.ZpglMslcLog;
import cn.timer.api.bean.zpgl.ZpglRcxx;
import cn.timer.api.config.annotation.UserBean;
import cn.timer.api.config.enuminterface.JxglEnumInterface;
import cn.timer.api.dto.zpgl.ZpglRcxxDto;
import cn.timer.api.utils.ZpglMessageTemplate;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import javax.transaction.Transactional;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author wuqingjun
 * @email 284718418@qq.com
 * @date 2022/3/18
 */
@Service
@Transactional(rollbackOn = Exception.class)
public class ZpglServiceImpl implements ZpglService {

    @Autowired
    private ZpglMslcLogService zpglMslcLogService;


    @Override
    public boolean updateZpglRcxx(UserBean userBean, ZpglRcxxDto zpglRcxxDto) {
        boolean count = false;
        ZpglRcxx zpglRcxx = ZpglRcxx.builder().id(zpglRcxxDto.getId()).status(zpglRcxxDto.getStatus()).build();
        ZpglMslcLog zpglMslcLog = new ZpglMslcLog();
        zpglMslcLog.setZpglRcxxId(zpglRcxxDto.getId());
        zpglMslcLog.setUserId(userBean.getEmpNum());
        zpglMslcLog.setUserName(userBean.getQyzxEmpLogin().getUsername());
        if(!StringUtils.isEmpty(zpglRcxxDto.getIfrck()) && zpglRcxxDto.getIfrck().intValue() == 1){
            zpglRcxx.setIfrckTime(new Date());
        }
        String detail = "";
        switch (zpglRcxxDto.getStatus()) {
            case 1:
                //待初筛 填充字段
                detail = ZpglMessageTemplate.print(ZpglMessageTemplate.FILTERING, new String[]{
                        userBean.getQyzxEmpLogin().getUsername()});
                break;
            case 2:
                //初筛通过 填充字段
                zpglRcxx.setIfrck(zpglRcxxDto.getIfrck());
                detail = ZpglMessageTemplate.print(ZpglMessageTemplate.FILTER_PASS, new String[]{
                        userBean.getQyzxEmpLogin().getUsername()});
                break;
            case 3:
                //安排面试 填充字段
                zpglRcxx.setInterviewNum(zpglRcxxDto.getInterviewNum());
                zpglRcxx.setInterviewWay(zpglRcxxDto.getInterviewWay());
                zpglRcxx.setInterviewerId(zpglRcxxDto.getInterviewerId());
                zpglRcxx.setInterviewTime(zpglRcxxDto.getInterviewTime());
                zpglRcxx.setNoticeWay(zpglRcxxDto.getNoticeWay());
                YgglMainEmp ygglMainEmp = YgglMainEmp.builder().build().selectOne(new QueryWrapper<YgglMainEmp>().select("name").lambda().eq(YgglMainEmp::getEmpNum, zpglRcxxDto.getInterviewerId()));
                detail = ZpglMessageTemplate.print(ZpglMessageTemplate.INTERVIEW, new String[]{
                        userBean.getQyzxEmpLogin().getUsername(),
                        zpglRcxxDto.getInterviewNum().toString(),
                        new SimpleDateFormat("yyyy-MM-dd' 'HH:mm:ss").format(zpglRcxxDto.getInterviewTime()),
                        ygglMainEmp.getName()});
                break;
            case 4:
                detail = ZpglMessageTemplate.print(ZpglMessageTemplate.INTERVIEWED, new String[]{
                        userBean.getQyzxEmpLogin().getUsername(), zpglRcxxDto.getInterviewNum().toString()});
                break;
            case 5:
                detail = ZpglMessageTemplate.print(ZpglMessageTemplate.INTERVIEW_PASS, new String[]{
                        userBean.getQyzxEmpLogin().getUsername()});
                break;
            case 6:

                detail = ZpglMessageTemplate.print(ZpglMessageTemplate.EMPLOY, new String[]{
                        userBean.getQyzxEmpLogin().getUsername()});
                break;
            case 7:
                //发送offer 填充字段
                zpglRcxx.setBmgwId(zpglRcxxDto.getBmgwId());
                zpglRcxx.setJobType(zpglRcxxDto.getJobType());
                zpglRcxx.setYjrzTime(zpglRcxxDto.getYjrzTime());
                detail = ZpglMessageTemplate.print(ZpglMessageTemplate.OFFER, new String[]{
                        userBean.getQyzxEmpLogin().getUsername()});
                //发送offer
                break;
            case 8:
                //待入职 填充字段
                zpglRcxx.setBmgwId(zpglRcxxDto.getBmgwId());
                zpglRcxx.setJobType(zpglRcxxDto.getJobType());
                zpglRcxx.setYjrzTime(zpglRcxxDto.getYjrzTime());
                detail = ZpglMessageTemplate.print(ZpglMessageTemplate.WAIT, new String[]{
                        userBean.getQyzxEmpLogin().getUsername()});
                break;
            case 9:
                //淘汰 填充字段
                zpglRcxx.setZpglFailId(zpglRcxxDto.getZpglFailId());
                zpglRcxx.setRemarks(zpglRcxxDto.getRemarks());
                ZpglFail zpglFail = ZpglFail.builder().id(zpglRcxxDto.getZpglFailId()).build().selectById();
                String messageTemplate = ZpglMessageTemplate.ENTRYING;
                if (!StringUtils.isEmpty(zpglFail)) {
                    if (zpglFail.getZpglRcxxStatus().equals(JxglEnumInterface.ResumeStatus.INTERVIEW_PASS.getType())) {
                        messageTemplate = ZpglMessageTemplate.INTERVIEWED_ENTRYING;
                    }
                    if (zpglFail.getZpglRcxxStatus().equals(JxglEnumInterface.ResumeStatus.OFFER.getType())) {
                        messageTemplate = ZpglMessageTemplate.OFFER_ENTRYING;
                    }
                    detail = ZpglMessageTemplate.print(messageTemplate, new String[]{
                            userBean.getQyzxEmpLogin().getUsername(), zpglFail.getFailCause(), zpglRcxxDto.getRemarks()});
                }
                break;
            case 10:
                //确认入职
                detail = ZpglMessageTemplate.print(ZpglMessageTemplate.ENTRY, new String[]{
                        userBean.getQyzxEmpLogin().getUsername()});
                break;
            default:
                break;
        }
        zpglMslcLog.setDetail(detail);
        count = zpglRcxx.updateById();
        zpglMslcLogService.addZpglMslcLog(zpglMslcLog);
        return count;
    }

    @Override
    public SysRegion getSysRegion(Integer keyId) {
        return SysRegion.builder().build()
                .selectOne(new QueryWrapper<SysRegion>().lambda().eq(SysRegion::getKeyId, keyId).select(
                        SysRegion::getRegionName, SysRegion::getKeyId, SysRegion::getZipCode,
                        SysRegion::getRegionCode));
    }
}