package com.bonus.canteen.core.menu.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.bonus.canteen.core.allocation.canteen.dto.AllocRecipeStallDTO;
import com.bonus.canteen.core.allocation.canteen.vo.AllocRecipeStallVO;
import com.bonus.canteen.core.common.page.PageVO;
import com.bonus.canteen.core.menu.dto.*;
import com.bonus.canteen.core.menu.entity.MenuRecipe;
import com.bonus.canteen.core.menu.vo.*;
import org.springframework.web.multipart.MultipartFile;

import java.time.LocalDate;
import java.util.List;
import java.util.Set;

public interface MenuRecipeService extends IService<MenuRecipe> {
    List<AppletWeekCanteenVO> getWeekMealList(AppletWeekCanteenDTO content);

    List<AppletWeekRecipeVO> getWeekRecipeDetailList(AppletWeekRecipeDTO content);

    List<AppletReserveCanteenVO> getReserveMealCanteenList(AppletReserveCanteenDTO content);

    List<AppletReserveRecipeVO> getReserveRecipeDetailList(AppletReserveRecipeDTO content);

    Set<Long> changeSurplusNum(List<MenuRecipeChangeSurplusNum> changeSurplusNumList, Long custId, Integer mealtimeType, LocalDate ordGoodsDate);

    Long addMenuRecipeV2(MenuRecipeV2AddDTO content);

    Page<MenuRecipeV2PageVO> getMenuRecipeV2Page(MenuRecipeV2PageDTO content);

    void removeByRecipeId(List<Long> recipeIds);

    void removeDetailByRecipeId(MenuRecipeDetailRemoveDTO content);

    Page<MenuRecipeDetailV2PageVO> getMenuRecipeDetailV2Page(MenuRecipeDetailV2PageDTO content);

    List<MenuRecipeDetailDateVO> getMenuRecipeDateDetail(MenuRecipeDetailDateDTO content);

    void addMenuRecipeV2Copy(MenuRecipeV2AddCopyDTO content);

    List<MenuRecipeDetailV2VO> getMenuRecipeDetailById(MenuRecipeDetailV2DTO content);

    void editRecipeBase(MenuRecipeV2EditDTO content);

    void bindAppRecipe(MenuRecipeBindDTO content);

    List<MenuAppBindRecipeVO> getBindAppRecipeList(MenuAppBindRecipeDTO content);

    Set<Long> getShopstallIdListByCustId(Long custId, boolean checkCustInfo);

    Set<String> recipeImportDishes(MultipartFile excel, Long recipeId);

    void deletebyInterval(MenuDeleteByDateAndIntervalDTO content);

    List<MenuRecipeDateVO> getBetweenDate(MenuSelectByDateDTO content);

    void generateRecipe(Long recipeId, LocalDate applyDate);

    List<MenuRecipeDetailDateVO> queryRecipeTemplateDate(QueryRecipeTemplateDateDTO content);

    List<MenuRecipeWeekVO> getWeek(Long content);

    void copyRecipeToStall(MenuCopyRecipeStallDTO content);

    void editMenuRecipeByApplyDate(MenuRecipeDetailEditDTO content);

    PageVO<AllocRecipeStallVO> queryCurrentRecipe(AllocRecipeStallDTO content);

    void editRecipeByTemplate(MenuRecipeDetailEditDTO content);

    void addDishesByDate(AddDishes2RecipeDto content);

    List<ExistDateVo> queryDishesByDate(QueryDishes2RecipeDto content);

    IssueRecipeCompressVO issueRecipeV2Compress(IssueRecipeV2DTO issueRecipeV2DTO);

    IssueRecipeVO issueRecipeV2(IssueRecipeV2DTO issueRecipeV2DTO);

    List<AndroidRecipeDetailVO> getAndroidRecipeDetail(String content);

    List<AndroidRecipeTypeDetailVO> getProductionMachineRecipe();

    MenuHeartBeatVO getHeartBeat(MenuHeartBeatDTO content);

    List<MenuEleDishRowRecipeVO> getEleDishRowRecipe(MenuEleDishRowRecipeDTO content);

    List<PersonalDietRecordVO> getPersonalDietRecord(PersonalDietRecordDTO content);

    List<AndroidAllProductsRecipeVO> getAllProductsRecipe(AndroidAllProductsRecipeDTO content);

    List<AndroidRecipeDetailThreeVO> getAndroidAllRecipe(MenuAndroidAllRecipeDTO content, String machineSn);

    AppletMenuRecipeCanteenVO getRecipeInfoByRecipeId(Long content);

    void androidAddRecipeDishes(AndroidAddRecipeDishesDTO content);

    List<AndroidGetRecipeDishesVO> androidGetRecipeDishes(AndroidGetRecipeDishesDTO content);

    void androidRemoveRecipeDishes(AndroidRemoveRecipeDishesDTO content);

    List<AndroidProductionRecipeVO> getProductionRecipeDetail(AndroidProductionRecipeDTO content);

    List<AndroidGetRecipeByShopVO> androidGetRecipeListByShop(AndroidGetRecipeByShopDTO content);

}
