package com.chinaweal.aiccs.aiccs.susnate.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.chinaweal.aiccs.aiccs.susnate.dto.*;
import com.chinaweal.aiccs.aiccs.susnate.entity.EFalPerInfo;
import com.chinaweal.aiccs.aiccs.susnate.entity.ENateOperRegDec;
import com.chinaweal.aiccs.aiccs.susnate.entity.ESusNateOperReg;
import com.chinaweal.aiccs.aiccs.susnate.mapper.ESusNateOperRegMapper;
import com.chinaweal.aiccs.aiccs.susnate.service.IEFalPerInfoService;
import com.chinaweal.aiccs.aiccs.susnate.service.IENateOperRegDecService;
import com.chinaweal.aiccs.aiccs.susnate.service.IESusNateOperRegService;
import com.chinaweal.aiccs.aiccs.susnate.vo.ESusNateVo;
import com.chinaweal.aiccs.aiccs.susnate.vo.EntBaseWithSusNateOperRegVO;
import com.chinaweal.aiccs.aiccs.susnate.vo.NateOperCombinedVO;
import com.chinaweal.aiccs.common.constant.CommonConstants;
import com.chinaweal.aiccs.common.util.StringUtils;
import com.chinaweal.youfool.framework.springboot.base.query.BaseQuery;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.UUID;

/**
 *
 * @author zhouxy
 * @since 2025-12-29
 */
@Service
public class ESusNateOperRegServiceImpl extends ServiceImpl<ESusNateOperRegMapper, ESusNateOperReg> implements IESusNateOperRegService {

    @Resource
    private IENateOperRegDecService iENateOperRegDecService;

    @Resource
    private IEFalPerInfoService iEFalPerInfoService;

    @Override
    public ESusNateOperReg saveESusNateOperReg(ESusNateOperReg eSusNateOperReg) {
        save(eSusNateOperReg);
        return eSusNateOperReg;
    }

    @Override
    public IPage<ESusNateVo> selectESusNateVoList(BaseQuery<ESusNateOperRegDto> query) {
        ESusNateOperRegDto entity = query.getEntity(ESusNateOperRegDto.class);
        Page<ESusNateOperRegDto> page = query.getPage();
        IPage<ESusNateVo> eSusNateVoIPage = baseMapper.selectESusNateVoList(page, entity);
        return eSusNateVoIPage;
    }

    @Override
    public void eSusNateVoSave(ESusNateVo eSusNateVo) {
        String dstate = "0";
        if (eSusNateVo.getDstate() == null) {
            eSusNateVo.setDstate(dstate);
        }
        if (eSusNateVo.getPripid() == null) {
            eSusNateVo.setPripid("");
        }
        ESusNateOperReg eSusNateOperReg = new ESusNateOperReg();
        ENateOperRegDec eNateOperRegDec = new ENateOperRegDec();
        EFalPerInfo eFalPerInfo = new EFalPerInfo();
        String id = UUID.randomUUID().toString().replaceAll("-", "");
        BeanUtils.copyProperties(eSusNateVo, eSusNateOperReg);
        BeanUtils.copyProperties(eSusNateVo, eNateOperRegDec);
        BeanUtils.copyProperties(eSusNateVo, eFalPerInfo);
        eSusNateOperReg.setPersonateId(id);
        eNateOperRegDec.setPersonatresId(id);
        eFalPerInfo.setFalperId(id);
        save(eSusNateOperReg);
        iENateOperRegDecService.save(eNateOperRegDec);
        iEFalPerInfoService.save(eFalPerInfo);
    }

    @Override
    public void eSusNateVoUpdate(ESusNateVo eSusNateVo) {
        String dstate = "1";
        ESusNateOperReg eSusNateOperReg = new ESusNateOperReg();
        ENateOperRegDec eNateOperRegDec = new ENateOperRegDec();
        EFalPerInfo eFalPerInfo = new EFalPerInfo();
        BeanUtils.copyProperties(eSusNateVo, eSusNateOperReg);
        BeanUtils.copyProperties(eSusNateVo, eNateOperRegDec);
        BeanUtils.copyProperties(eSusNateVo, eFalPerInfo);
        eSusNateOperReg.setDstate(dstate);
        eNateOperRegDec.setDstate(dstate);
        eFalPerInfo.setDstate(dstate);
        updateById(eSusNateOperReg);
        iENateOperRegDecService.updateById(eNateOperRegDec);
        iEFalPerInfoService.updateById(eFalPerInfo);
    }

    @Override
    public void eSusNateVoRemove(ESusNateVo eSusNateVo) {
        String id = eSusNateVo.getPersonateId();
        if (id != null) {
            System.out.println("没问题啦" + id);
        }
        String dstate = "0";
        ESusNateOperReg eSusNateOperReg = new ESusNateOperReg();
        ENateOperRegDec eNateOperRegDec = new ENateOperRegDec();
        EFalPerInfo eFalPerInfo = new EFalPerInfo();
        LambdaQueryWrapper<ESusNateOperReg> queryWrapper1 = new LambdaQueryWrapper<>();
        queryWrapper1.eq(ESusNateOperReg::getPersonateId, id);
        LambdaQueryWrapper<ENateOperRegDec> queryWrapper2 = new LambdaQueryWrapper<>();
        queryWrapper2.eq(ENateOperRegDec::getPersonatresId, id);
        LambdaQueryWrapper<EFalPerInfo> queryWrapper3 = new LambdaQueryWrapper<>();
        queryWrapper3.eq(EFalPerInfo::getFalperId, id);
        eSusNateOperReg = getOne(queryWrapper1, false);
        eSusNateOperReg.setDstate(dstate);
        eNateOperRegDec = iENateOperRegDecService.getOne(queryWrapper2, false);
        eNateOperRegDec.setDstate(dstate);
        eFalPerInfo = iEFalPerInfoService.getOne(queryWrapper3, false);
        eFalPerInfo.setDstate(dstate);
        updateById(eSusNateOperReg);
        iENateOperRegDecService.updateById(eNateOperRegDec);
        iEFalPerInfoService.updateById(eFalPerInfo);
    }

    @Override
    public ESusNateOperReg addSusNateOperReg(ESusNateOperRegAddDTO dto) {
        ESusNateOperReg entity = new ESusNateOperReg();
        LocalDateTime now = LocalDateTime.now();
        entity.setPripid(dto.getPripid());
        entity.setEntname(dto.getEntname());
        entity.setUniscid(dto.getUniscid());
        entity.setRegno(dto.getRegno());
        if (dto.getRegTime() == null) {
            dto.setRegTime(now.toLocalDate());
            entity.setRegTime(dto.getRegTime());
        }
        entity.setRegItem(dto.getRegItem());
        entity.setRegOrg(dto.getRegOrg());
        entity.setRegOrgCn(dto.getRegOrgCn());
        entity.setTel(dto.getTel());
        entity.setNoticeFrom(dto.getNoticeFrom());
        entity.setNoticeTo(dto.getNoticeTo());
        entity.setName(dto.getName());
        entity.setHandlRest(dto.getHandlRest());
        entity.setHandlRea(dto.getHandlRea());
        entity.setHandlReaCn(dto.getHandlReaCn());
        entity.setJudAuth(dto.getJudAuth());
        entity.setJudAuthCn(dto.getJudAuthCn());
        entity.setJudDate(dto.getJudDate());
        entity.setDstate(CommonConstants.FALSE_0);
        save(entity);
        return entity;
    }

    @Override
    public ESusNateOperReg updateSusNateOperReg(ESusNateOperRegUpdateDTO dto) {
        ESusNateOperReg entity = new ESusNateOperReg();
        entity.setPersonateId(dto.getPersonateId());
        entity.setPripid(dto.getPripid());
        entity.setEntname(dto.getEntname());
        entity.setUniscid(dto.getUniscid());
        entity.setRegno(dto.getRegno());
        entity.setRegTime(dto.getRegTime());
        entity.setRegItem(dto.getRegItem());
        entity.setRegOrg(dto.getRegOrg());
        entity.setRegOrgCn(dto.getRegOrgCn());
        entity.setTel(dto.getTel());
        entity.setNoticeFrom(dto.getNoticeFrom());
        entity.setNoticeTo(dto.getNoticeTo());
        entity.setName(dto.getName());
        entity.setHandlRest(dto.getHandlRest());
        entity.setHandlRea(dto.getHandlRea());
        entity.setHandlReaCn(dto.getHandlReaCn());
        entity.setJudAuth(dto.getJudAuth());
        entity.setJudAuthCn(dto.getJudAuthCn());
        entity.setJudDate(dto.getJudDate());
        updateById(entity);
        return entity;
    }

    @Override
    public boolean deleteSusNateOperReg(String personateId) {
        ESusNateOperReg entity = new ESusNateOperReg();
        entity.setPersonateId(personateId);
        entity.setDstate("2");
        return updateById(entity);
    }

    @Override
    public IPage<EntBaseWithSusNateOperRegVO> listEntBaseWithSusNateOperReg(Page<EntBaseWithSusNateOperRegVO> page, EntBaseWithSusNateOperRegQueryDTO query) {
        return baseMapper.listEntBaseWithSusNateOperReg(page, query);
    }

    @Override
    public IPage<ESusNateOperReg> listSusNateOperReg(Page<ESusNateOperReg> page, ESusNateOperRegQueryDTO query) {
        LambdaQueryWrapper<ESusNateOperReg> lambdaQueryWrapper = Wrappers.lambdaQuery();

        if (StringUtils.isNotBlank(query.getUniscid())) {
            lambdaQueryWrapper.eq(ESusNateOperReg::getUniscid, query.getUniscid());
        }
        if (StringUtils.isNotBlank(query.getEntname())) {
            lambdaQueryWrapper.like(ESusNateOperReg::getEntname, query.getEntname());
        }
        if (StringUtils.isNotBlank(query.getRegno())) {
            lambdaQueryWrapper.eq(ESusNateOperReg::getRegno, query.getRegno());
        }
        lambdaQueryWrapper.ne(ESusNateOperReg::getDstate, "2");

        return page(page, lambdaQueryWrapper);
    }

    @Override
    public IPage<NateOperCombinedVO> listNateOperCombined(Page<NateOperCombinedVO> page, NateOperCombinedQueryDTO query) {
        return baseMapper.listNateOperCombined(page, query);
    }
}
