package shop.alien.store.service;

import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.web.bind.annotation.RequestParam;
import shop.alien.entity.result.R;
import shop.alien.entity.store.StoreMenu;
import shop.alien.entity.store.vo.StoreMenuVo;

import java.util.List;

/**
 * 二期-门店推荐 服务类
 *
 * @author ssk
 * @since 2024-12-05
 */
public interface StoreMenuService extends IService<StoreMenu> {

    /**
     * 获取门店菜单
     *
     * @param storeId      门店id
     * @param dishType     菜品类型, 0:非推荐, 1:推荐
     * @param phoneId      用户手机号
     * @param dishMenuType 菜单类型：1-菜单，2-酒水
     * @return list
     */
    List<StoreMenuVo> getStoreMenu(Integer storeId, Integer dishType, String phoneId, Integer dishMenuType);


    /**
     * 获取菜品详情
     *
     * @param id 菜品id
     * @return StoreMenuVo
     */
    StoreMenuVo getMenuInfo(Integer id);

    /**
     * 新增或修改门店菜单
     *
     */
    R<String> saveOrUpdateMenu(StoreMenu storeMenu);

    /**
     * 新增或修改门店菜单
     *
     */
    R<String> saveOrUpdateMenus(StoreMenuVo storeMenuVo);

    /**
     *
     * 菜品排序
     */
    Boolean getSortMenuInfo(StoreMenuVo storeMenuVo);

    /**
     *
     * 保存菜品排序
     */
    Boolean saveMenuSort(List<StoreMenu> storeMenuList);

    /**
     *
     * 删除门店菜单
     */
    R deleteMenu(List<Integer> ids, int dishType);



    StoreMenuVo getMenuCountByStoreId(int storeId);

    /**
     * 获取用户对该菜品是否点赞
     *
     * @param userId  用户id
     * @param menuId 菜品id
     * @return boolean
     */
    boolean getMenuLikeStatus(String userId, Integer menuId);


    /**
     * 获取门店菜单（客户端）
     * <p>
     * 根据门店ID查询菜单列表，支持按菜品类型和菜单类型筛选。
     * 当查询推荐菜且提供用户手机号时，会批量查询并设置用户的点赞状态。
     * 最终结果按排序字段升序排列。
     * </p>
     *
     * @param storeId      门店ID，必填，必须大于0
     * @param dishType     菜品类型，可选，0:非推荐, 1:推荐。当为0时，查询条件中不包含菜品类型限制
     * @param phoneId      用户手机号，可选，用于查询用户对推荐菜的点赞状态
     * @param dishMenuType 菜单类型，可选，1-菜单，2-酒水
     * @return Map包含菜单列表和统计信息：list(菜单列表)、count(按四种组合统计：menu_all、menu_recommend、drink_all、drink_recommend)
     * @throws IllegalArgumentException 当门店ID为空或小于等于0时抛出
     */
    java.util.Map<String, Object> getClientMenuByStoreId(Integer storeId, Integer dishType, String phoneId, Integer dishMenuType);

    /**
     * 获取菜品详情
     *
     * @param id 菜品id
     * @return StoreMenuVo
     */
    StoreMenuVo getClientMenuInfoById(Integer id, String phoneId);
}

