package com.yuchen.saas.park.service.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yuchen.saas.park.api.dto.park.PmgBatPersonSysconfigDto;
import com.yuchen.saas.park.api.entity.park.PmgBatPersonSysconfig;
import com.yuchen.saas.park.api.vo.park.PmgBatPersonSysconfigAndSwitchVo;
import com.yuchen.saas.park.api.vo.park.PmgBatPersonSysconfigVo;
import com.yuchen.saas.park.service.mapper.PmgBatPersonSysconfigMapper;
import com.yuchen.saas.park.service.service.IPmgBatPersonSysconfigService;
import com.yuchen.saas.parking.api.entity.PmgBatParkBill;
import com.yuchen.saas.parking.api.entity.VehicleMonthlyCardData;
import org.nest.springwrap.core.mp.base.BaseServiceImpl;
import org.nest.springwrap.core.tool.api.R;
import org.nest.springwrap.core.tool.utils.Func;
import org.nest.springwrap.core.tool.utils.StringUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

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

/**
 * <p>
 * 人员-系统配置表 服务实现类
 * </p>
 *
 * @author baichaojie
 * @since 2024-11-05
 */
@Service
public class PmgBatPersonSysconfigServiceImpl extends BaseServiceImpl<PmgBatPersonSysconfigMapper, PmgBatPersonSysconfig> implements IPmgBatPersonSysconfigService {

//    @Override
//    public R<PmgBatPersonSysconfigVo> getValueByKey(String paramCode) {
//        QueryWrapper<PmgBatPersonSysconfig> queryWrapper = new QueryWrapper();
//        queryWrapper.eq("param_code", paramCode);
//        PmgBatPersonSysconfig pmgBatPersonSysconfig = baseMapper.selectOne(queryWrapper);
//
//        PmgBatPersonSysconfigVo pmgBatPersonSysconfigVo = new PmgBatPersonSysconfigVo();
//        BeanUtils.copyProperties(pmgBatPersonSysconfig, pmgBatPersonSysconfigVo);
//
//        return R.data(pmgBatPersonSysconfigVo);
//    }

    @Override
    public boolean saveValueByKey(PmgBatPersonSysconfigDto pmgBatPersonSysconfigDto) {
        LambdaQueryWrapper<PmgBatPersonSysconfig> queryWrapper = new LambdaQueryWrapper();
        queryWrapper.eq(Func.isNotEmpty(pmgBatPersonSysconfigDto.getParamCode()), PmgBatPersonSysconfig::getParamCode, pmgBatPersonSysconfigDto.getParamCode());
        queryWrapper.eq(Func.isNotEmpty(pmgBatPersonSysconfigDto.getParkId()), PmgBatPersonSysconfig::getParkId, pmgBatPersonSysconfigDto.getParkId());
        queryWrapper.eq(Func.isNotEmpty(pmgBatPersonSysconfigDto.getParamType()), PmgBatPersonSysconfig::getParamType, pmgBatPersonSysconfigDto.getParamType());
        PmgBatPersonSysconfig pmgBatPersonSysconfig = baseMapper.selectOne(queryWrapper);

        boolean update = false;
        if (pmgBatPersonSysconfig == null) {
            PmgBatPersonSysconfig pmgBatPersonSysconfigNew = new PmgBatPersonSysconfig();

            pmgBatPersonSysconfigNew.setParamCode(pmgBatPersonSysconfigDto.getParamCode());
            pmgBatPersonSysconfigNew.setParamType(pmgBatPersonSysconfigDto.getParamType());
            pmgBatPersonSysconfigNew.setParamValue(pmgBatPersonSysconfigDto.getParamValue());
            pmgBatPersonSysconfigNew.setParamName(pmgBatPersonSysconfigDto.getParamName());
            pmgBatPersonSysconfigNew.setCreateTime(new Date());
            pmgBatPersonSysconfigNew.setUpdateTime(new Date());
            pmgBatPersonSysconfigNew.setParkId(pmgBatPersonSysconfigDto.getParkId());
            //pmgBatPersonSysconfigNew.setCreateUser();
            //pmgBatPersonSysconfigNew.setCreateDept();
            //pmgBatPersonSysconfigNew.setUpdateUser();
            //pmgBatPersonSysconfigNew.setStatus();
            pmgBatPersonSysconfigNew.setIsDeleted(0);
            this.saveOrUpdate(pmgBatPersonSysconfigNew);
        } else {
            pmgBatPersonSysconfig.setParamName(pmgBatPersonSysconfigDto.getParamName());
            if (StringUtil.isNotBlank(pmgBatPersonSysconfigDto.getParamType())) {
                pmgBatPersonSysconfig.setParamType(pmgBatPersonSysconfigDto.getParamType());
            }
            pmgBatPersonSysconfig.setParamValue(pmgBatPersonSysconfigDto.getParamValue());
            update = this.saveOrUpdate(pmgBatPersonSysconfig);
        }


        return update;
    }

    @Override
    public R<PmgBatPersonSysconfigAndSwitchVo> getPersonSync(Long parkId) {
        LambdaQueryWrapper<PmgBatPersonSysconfig> queryWrapper = new LambdaQueryWrapper();
        queryWrapper.eq(PmgBatPersonSysconfig::getParkId, parkId);
        queryWrapper.and(wrapper -> wrapper.eq(PmgBatPersonSysconfig::getParamType, "1").or().eq(PmgBatPersonSysconfig::getParamType, "2"));

        List<PmgBatPersonSysconfig> listPmgBatPersonSysconfig = baseMapper.selectList(queryWrapper);
        List<PmgBatPersonSysconfigVo> records = this.listVO(listPmgBatPersonSysconfig);


        PmgBatPersonSysconfigAndSwitchVo pmgBatPersonSysconfigAndSwitchVo = new PmgBatPersonSysconfigAndSwitchVo();
        pmgBatPersonSysconfigAndSwitchVo.setListPmgBatPersonSysconfigVo(records);

        LambdaQueryWrapper<PmgBatPersonSysconfig> queryWrapperSwitch = new LambdaQueryWrapper();
        queryWrapperSwitch.eq(PmgBatPersonSysconfig::getParkId, parkId);
        queryWrapperSwitch.eq(PmgBatPersonSysconfig::getParamCode, "isSync");
        PmgBatPersonSysconfig pmgBatPersonSysconfigSwitch = baseMapper.selectOne(queryWrapperSwitch);

        if (pmgBatPersonSysconfigSwitch == null) {
            pmgBatPersonSysconfigAndSwitchVo.setIsSwitch(0);
        } else {
            if ("1".equals(pmgBatPersonSysconfigSwitch.getParamValue())) {
                pmgBatPersonSysconfigAndSwitchVo.setIsSwitch(1);
            } else {
                pmgBatPersonSysconfigAndSwitchVo.setIsSwitch(0);
            }
        }
        pmgBatPersonSysconfigAndSwitchVo.setParkId(parkId);

        return R.data(pmgBatPersonSysconfigAndSwitchVo);
    }

    @Override
    public boolean savePersonSync(PmgBatPersonSysconfigAndSwitchVo pmgBatPersonSysconfigAndSwitchVo) {

        if (pmgBatPersonSysconfigAndSwitchVo == null) {
            throw new RuntimeException("缺少请求参数");
        }


        Integer isSwitch = pmgBatPersonSysconfigAndSwitchVo.getIsSwitch();
        long parkId = pmgBatPersonSysconfigAndSwitchVo.getParkId();
        saveVBK(parkId, isSwitch);


        List<PmgBatPersonSysconfigVo> listPmgBatPersonSysconfigVo = pmgBatPersonSysconfigAndSwitchVo.getListPmgBatPersonSysconfigVo();
        for (PmgBatPersonSysconfigVo pmgBatPersonSysconfigVo : listPmgBatPersonSysconfigVo) {
            boolean update = this.saveOrUpdate(pmgBatPersonSysconfigVo);
        }


        return true;


    }


    private boolean saveVBK(Long parkId, Integer isSwitch) {
        PmgBatPersonSysconfigDto pmgBatPersonSysconfigDto = new PmgBatPersonSysconfigDto();
        pmgBatPersonSysconfigDto.setParkId(parkId + "");
        pmgBatPersonSysconfigDto.setParamValue(isSwitch + "");
        pmgBatPersonSysconfigDto.setParamCode("isSync");
        pmgBatPersonSysconfigDto.setParamName("是否开启人员同步");
        return this.saveValueByKey(pmgBatPersonSysconfigDto);
    }


    private List<PmgBatPersonSysconfigVo> listVO(List<PmgBatPersonSysconfig> listPmgBatPersonSysconfig) {
        return (List) listPmgBatPersonSysconfig.stream().map(entity -> {
            PmgBatPersonSysconfigVo pmgBatPersonSysconfigVo = detail(entity.getId(), entity).getData();
            return pmgBatPersonSysconfigVo;
        }).collect(Collectors.toList());
    }


    public R<PmgBatPersonSysconfigVo> detail(Long id, PmgBatPersonSysconfig pmgBatPersonSysconfig) {
        PmgBatPersonSysconfigVo pmgBatPersonSysconfigVo = new PmgBatPersonSysconfigVo();
        BeanUtils.copyProperties(pmgBatPersonSysconfig, pmgBatPersonSysconfigVo);
        return R.data(pmgBatPersonSysconfigVo);
    }

}
