package cn.iocoder.yudao.module.iot.service.recipetype;

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 cn.iocoder.yudao.module.iot.controller.admin.recipetype.vo.*;
import cn.iocoder.yudao.module.iot.dal.dataobject.recipetype.RecipeTypeDO;
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.iot.dal.mysql.recipetype.RecipeTypeMapper;

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

/**
 * 配方类型表（基础字典） Service 实现类
 *
 * @author 内蒙必硕
 */
@Service
@Validated
public class RecipeTypeServiceImpl implements RecipeTypeService {

    @Resource
    private RecipeTypeMapper recipeTypeMapper;

    @Override
    public Long createRecipeType(RecipeTypeSaveReqVO createReqVO) {
        // 插入
        RecipeTypeDO recipeType = BeanUtils.toBean(createReqVO, RecipeTypeDO.class);
        recipeTypeMapper.insert(recipeType);
        // 返回
        return recipeType.getId();
    }

    @Override
    public void updateRecipeType(RecipeTypeSaveReqVO updateReqVO) {
        // 校验存在
        validateRecipeTypeExists(updateReqVO.getId());
        // 更新
        RecipeTypeDO updateObj = BeanUtils.toBean(updateReqVO, RecipeTypeDO.class);
        recipeTypeMapper.updateById(updateObj);
    }

    @Override
    public void deleteRecipeType(Long id) {
        // 校验存在
        validateRecipeTypeExists(id);
        // 删除
        recipeTypeMapper.deleteById(id);
    }

    private void validateRecipeTypeExists(Long id) {
        if (recipeTypeMapper.selectById(id) == null) {
            throw exception(RECIPE_TYPE_NOT_EXISTS);
        }
    }

    @Override
    public RecipeTypeDO getRecipeType(Long id) {
        return recipeTypeMapper.selectById(id);
    }

    @Override
    public PageResult<RecipeTypeDO> getRecipeTypePage(RecipeTypePageReqVO pageReqVO) {
        return recipeTypeMapper.selectPage(pageReqVO);
    }

    @Override
    public PageResult<RecipeTypeDO> getRecipeTypeAll(RecipeTypePageReqVO pageReqVO) {
        // 使用QueryWrapper构建查询条件
        com.baomidou.mybatisplus.core.conditions.query.QueryWrapper<RecipeTypeDO> queryWrapper =
                new com.baomidou.mybatisplus.core.conditions.query.QueryWrapper<>();

        // 根据pageReqVO的条件进行查询（需要根据实际字段进行条件设置）
        // 例如：queryWrapper.like(StringUtils.hasText(pageReqVO.getName()), "name", pageReqVO.getName());

        List<RecipeTypeDO> list = recipeTypeMapper.selectList(queryWrapper);

        // 封装成PageResult返回（总数=列表长度，保持返回格式和分页接口一致）
        return new PageResult<>(list, (long) list.size());
    }

}