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.common.page.PageVO;
import com.bonus.canteen.core.menu.dto.*;
import com.bonus.canteen.core.menu.entity.MenuDishes;
import com.bonus.canteen.core.menu.entity.MenuDishesImportFail;
import com.bonus.canteen.core.menu.utils.NutritionEntity;
import com.bonus.canteen.core.menu.vo.*;
import com.bonus.common.core.web.domain.AjaxResult;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Map;

public interface MenuDishesService extends IService<MenuDishes> {
   AppletDishesDetailVO getDishesDetailByDishesId(AppletDishesDetailDTO dto);

   NutritionEntity getNutrientInfo(Map<Long, Double> dishesQuantityMap);

   List<MenuDishes> getMenuDishesList(List<Long> dishesIdList);

   void updateDishesNutritionByNutritionId(Long nutritionId);

   void updateDishesNutrition(List<Long> materialId);

   void importDishesFailSave(List<MenuDishesImportFail> dishesImportFailList);

   AddDishesVo addMenuDishesV2(MenuDishesV2AddDTO leRequest);

   Page<MenuDishesV2PageVO> getMenuDishesV2Page(MenuDishesV2PageDTO content);

   MenuDishesDetailVO getMenuDishesDetail(Long dishesId);

   void editMenuDishesV2(MenuDishesV2EditDTO content);

   void removeByDishesIdV2(Long dishesId);

   void copyMenuDishes(MenuDishesCopyDTO content);

   List<MenuAllTypeDishesVO> getTypeDishesList(MenuTypeDishesDTO content);

   PageVO<MenuAllTypeDishesVO> getTypeDishesListByPage(MenuTypeDishesDTO content);

   String getDifCanteenManage();

   void editDifCanteenManage(MenuDifCanteenManageEditDTO content);

   Boolean newImportDishes(List<MenuDishesImportDTO> content);

   DishesImportCheckResult importDishesCheck(MultipartFile excel);

   Integer getDishesMaterialCost(List<MenuMaterialCostDTO> content);

   void autoUpdateDishesMaterialCost();

   List<MenuDishesExportVO> exportMenuDishes(MenuDishesExportDTO content);

   Boolean uploadBatchDishes(MultipartFile[] files);

   void replaceMaterialDishes(ReplaceMaterialDto content);
}
