package cn.iocoder.yudao.module.mes.service.moldrepairtems;

//import cn.iocoder.yudao.module.iot.controller.admin.mold.vo.LineMoldRespVO;
//import cn.iocoder.yudao.module.iot.dal.dataobject.moldmodel.MoldModelDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.criticalcomponent.CriticalComponentDO;
import cn.iocoder.yudao.module.common.dal.dataobject.mold.MoldDO;
import cn.iocoder.yudao.module.common.dal.dataobject.mold.MoldBrandDO;
import cn.iocoder.yudao.module.mes.dal.mysql.criticalcomponent.CriticalComponentMapper;
import cn.iocoder.yudao.module.common.dal.mysql.mold.MoldMapper;
import cn.iocoder.yudao.module.mes.service.moldrepairtems.MoldRepairTemsService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;

import java.util.*;
import java.util.stream.Collectors;

import cn.iocoder.yudao.module.mes.controller.admin.moldrepairtems.vo.*;
import cn.iocoder.yudao.module.mes.dal.dataobject.moldrepairtems.MoldRepairTemsDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;

import cn.iocoder.yudao.module.mes.dal.mysql.moldrepairtems.MoldRepairTemsMapper;

import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.DEVICE_MODEL_CODE_EXISTS;
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;

/**
 * 维修项目 Service 实现类
 *
 * @author 内蒙必硕
 */
@Service
@Validated
public class MoldRepairTemsServiceImpl implements MoldRepairTemsService {

    @Resource
    private MoldRepairTemsMapper moldrepairTemsMapper;


    @Resource
    private MoldMapper moldMapper;
    @Resource
    private CriticalComponentMapper criticalComponentMapper;

    @Override
    public Long createMoldRepairTems(MoldRepairTemsSaveReqVO createReqVO) {
        //编码重复判断
        Long count = moldrepairTemsMapper.selectCount(new LambdaQueryWrapper<MoldRepairTemsDO>()
                .eq(MoldRepairTemsDO::getSubjectCode, createReqVO.getSubjectCode())
        );

        if (count > 0) {
            throw exception(REPAIR_TEMS_CODE_EXISTS);
        }

        // 插入
        MoldRepairTemsDO moldrepairTems = BeanUtils.toBean(createReqVO, MoldRepairTemsDO.class);
        moldrepairTemsMapper.insert(moldrepairTems);
        // 返回
        return moldrepairTems.getId();
    }

    @Override
    public void updateMoldRepairTems(MoldRepairTemsSaveReqVO updateReqVO) {
        // 校验存在
        validateMoldRepairTemsExists(updateReqVO.getId());

        //编码重复判断
        Long count = moldrepairTemsMapper.selectCount(new LambdaQueryWrapper<MoldRepairTemsDO>()
                .eq(MoldRepairTemsDO::getSubjectCode, updateReqVO.getSubjectCode())
                .ne(MoldRepairTemsDO::getId, updateReqVO.getId())

        );

        if (count > 0) {
            throw exception(REPAIR_TEMS_CODE_EXISTS);
        }

        // 更新
        MoldRepairTemsDO updateObj = BeanUtils.toBean(updateReqVO, MoldRepairTemsDO.class);
        moldrepairTemsMapper.updateById(updateObj);
    }

    @Override
    public void deleteMoldRepairTems( List<Long> idList) {
        for (Long id : idList) {
            // 校验存在
            validateMoldRepairTemsExists(id);
        }

        // 删除
        moldrepairTemsMapper.deleteByIds(idList);
    }

    private void validateMoldRepairTemsExists(Long id) {
        if (moldrepairTemsMapper.selectById(id) == null) {
            throw exception(REPAIR_TEMS_NOT_EXISTS);
        }
    }

    @Override
    public MoldRepairTemsDO getMoldRepairTems(Long id) {
        return moldrepairTemsMapper.selectById(id);
    }

    @Override
    public PageResult<MoldRepairTemsRespVO> getMoldRepairTemsPage(MoldRepairTemsPageReqVO pageReqVO) {
        Page<MoldRepairTemsRespVO> page = new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
        IPage<MoldRepairTemsRespVO> moldrepairTemsDOIPage = moldrepairTemsMapper.getMoldRepairTemsPage(page,pageReqVO);
        PageResult<MoldRepairTemsRespVO> moldrepairTemsDOPageResult = new PageResult<>(moldrepairTemsDOIPage.getRecords(), moldrepairTemsDOIPage.getTotal());
        return moldrepairTemsDOPageResult;
    }

//    @Override
//    public List<MoldRepairTemsRespVO> getMoldOrComponent(Integer moldBrand) {
//        return moldrepairTemsMapper.getMoldRepairTemsList(new MoldRepairTemsPageReqVO().setMoldBrand(moldBrand));
//    }

//    @Override
//    public List<MoldRepairTemsRespVO> getMoldOrComponentList(Long moldId, Long componentId) {
//        return moldrepairTemsMapper.getMoldRepairTemsList(new MoldRepairTemsPageReqVO().setMoldId(moldId).setComponentId(componentId));
//    }

//    @Override
//    public List<CriticalComponentDO> getComponentList(Long moldId) {
//
//        MoldDO moldDO = moldMapper.selectById(moldId);
//        if(moldDO == null ){
//            throw exception(DEVICE_LEDGER_NOT_EXISTS);
//        }
//
//        if (StringUtils.isBlank(moldDO.getComponentId())){
//            return new ArrayList<>();
//        }
//
//        List<CriticalComponentDO> criticalComponentDOS= new ArrayList<>();
//        List<Long> idList = Arrays.stream(moldDO.getComponentId().split(","))
//                .map(String::trim) // 去除可能存在的空格
//                .map(Long::valueOf)
//                .collect(Collectors.toList());
//
//        for (Long id : idList) {
//            CriticalComponentDO criticalComponentDO = criticalComponentMapper.selectById(id);
//            if (criticalComponentDO !=null){
//                criticalComponentDOS.add(criticalComponentDO);
//            }
//        }
//
//        return criticalComponentDOS;
//    }

}