package com.bonus.canteen.core.cook.mapper;

import java.util.List;

import com.bonus.canteen.core.cook.domain.*;
import com.bonus.canteen.core.utils.NutritionEntity;
import org.apache.ibatis.annotations.Param;

/**
 * 菜品信息Mapper接口
 * 
 * @author xsheng
 * @date 2025-05-25
 */
public interface CookDishesMapper {
    /**
     * 查询菜品信息
     * 
     * @param dishesId 菜品信息主键
     * @return 菜品信息
     */
    public CookDishes selectCookDishesByDishesId(Long dishesId);

    /**
     * 查询菜品信息列表
     * 
     * @param cookDishes 菜品信息
     * @return 菜品信息集合
     */
    public List<CookDishes> selectCookDishesList(CookDishes cookDishes);

    /**
     * 新增菜品信息
     * 
     * @param cookDishes 菜品信息
     * @return 结果
     */
    public int insertCookDishes(CookDishes cookDishes);

    /**
     * 修改菜品信息
     * 
     * @param cookDishes 菜品信息
     * @return 结果
     */
    public int updateCookDishes(CookDishes cookDishes);

    /**
     * 删除菜品信息
     * 
     * @param dishesId 菜品信息主键
     * @return 结果
     */
    public int deleteCookDishesByDishesId(Long dishesId);

    /**
     * 批量删除菜品信息
     * 
     * @param dishesIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteCookDishesByDishesIds(Long[] dishesIds);

    /**
     * 校验菜品名称是否唯一
     *
     * @param cookDishes 菜品名称
     * @return 结果
     */
    public int checkDishIsExist(CookDishes cookDishes);

    /**
     * 新增菜品信息
     *
     * @param dishesMaterialList 菜品信息
     * @param dishesId 菜品id
     */
    void insertDishesMaterial(@Param("list") List<CookDishesMaterial> dishesMaterialList,@Param("dishesId") Long dishesId);

    /**
     * 删除菜品信息
     *
     * @param dishesId 菜品id
     */
    void deleteDishesMaterialByDishesId(Long dishesId);

    /**
     * 根据菜品id查询菜品营养信息
     *
     * @param nutritionEntity 菜品营养信息
     * @param dishesId 菜品id
     * @return 菜品营养信息
     */
    int updateFinalNutrition(@Param("bean") NutritionEntity nutritionEntity,@Param("dishesId") Long dishesId);

    /**
     * 根据菜品id查询菜品计划详情id
     *
     * @param dishesIds 菜品id
     * @param applyDate 应用日期
     * @return 菜品计划详情id列表
     */
    List<Long> selectDishPlanDetailIdByDishId(@Param("dishesIds") Long[] dishesIds,@Param("applyDate") String applyDate);

    /**
     * 批量删除菜品信息
     *
     * @param detailIdList 菜品计划详情id列表
     * @param dishesIds 菜品id
     */
    void deleteCookDishesByDishPlanDetailIds(@Param("detailIdList") List<Long> detailIdList,@Param("dishesIds") Long[] dishesIds);

    /**
     * 根据菜品id查询菜品材料信息
     *
     * @param cookDishes 菜品id
     * @return 菜品材料信息
     */
    List<CookDishesMaterial> selectCookDishesMaterialList(CookDishes cookDishes);

    /**
     * 查询菜品名称和食堂名称
     *
     * @return 菜品名称和食堂名称
     */
    List<String> selectDishesNameAndCanteenName();

    /**
     * 获取菜品材料信息
     *
     * @return 菜品材料信息
     */
    List<MapBean> getMenuMaterialMap();

    /**
     * 获取区域信息
     *
     * @return 区域信息
     */
    List<AllocArea> selectAreaList();

    /**
     * 获取食堂信息
     *
     * @return 食堂信息
     */
    List<AllocCanteen> selectCanteenList();

    /**
     * 获取菜品信息
     *
     * @return 菜品信息
     */
    List<AllocStall> selectStallList();

    /**
     * 获取菜品材料类型信息
     *
     * @return 菜品材料类型信息
     */
    List<MapBean> getCookMaterialTypeMap();
}
