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

import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.iot.controller.admin.recipe.vo.*;
import cn.iocoder.yudao.module.iot.dal.dataobject.recipe.RecipeDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;

/**
 * 配方管理主 Service 接口
 *
 * @author 内蒙必硕
 */
public interface RecipeService {

    /**
     * 创建配方管理主
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createRecipe(@Valid RecipeSaveReqVO createReqVO);

    /**
     * 更新配方管理主
     *
     * @param updateReqVO 更新信息
     */
    void updateRecipe(@Valid RecipeSaveReqVO updateReqVO);

    /**
     * 删除配方管理主
     *
     * @param id 编号
     */
    void deleteRecipe(Long id);

    /**
     * 获得配方管理主
     *
     * @param id 编号
     * @return 配方管理主
     */
    RecipeDO getRecipe(Long id);

    /**
     * 获得配方管理主分页
     *
     * @param pageReqVO 分页查询
     * @return 配方管理主分页
     */
    PageResult<RecipeDO> getRecipePage(RecipePageReqVO pageReqVO);

    // ========== 新增：声明带deviceId的方法 ==========
    /**
     * 获得配方管理主分页（包含deviceId字段）
     *
     * @param pageReqVO 分页查询
     * @return 配方管理主分页（含deviceId）
     */
    PageResult<RecipeRespVO> getRecipePageWithDeviceId(RecipePageReqVO pageReqVO);

    /**
     * 获得单个配方管理主（包含deviceId字段）
     *
     * @param id 编号
     * @return 配方管理主（含deviceId）
     */
    RecipeRespVO getRecipeWithDeviceId(Long id);

}