package shop.alien.store.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import shop.alien.entity.store.StoreBookingCategory;

import java.util.List;

/**
 * 预订服务分类表 服务类
 *
 * @author system
 * @since 2025-01-XX
 */
public interface StoreBookingCategoryService extends IService<StoreBookingCategory> {

    /**
     * 查询预订服务分类列表（按排序字段排序）
     *
     * @param storeId 门店ID
     * @return List<StoreBookingCategory>
     */
    List<StoreBookingCategory> getCategoryList(Integer storeId);

    /**
     * 分页查询预订服务分类列表（按排序字段排序）
     *
     * @param pageNum  页数
     * @param pageSize 页容
     * @param storeId  门店ID
     * @return IPage<StoreBookingCategory>
     */
    IPage<StoreBookingCategory> getCategoryListPage(Integer pageNum, Integer pageSize, Integer storeId);

    /**
     * 新增预订服务分类
     *
     * @param category 分类对象
     * @return boolean
     */
    boolean addCategory(StoreBookingCategory category);

    /**
     * 更新预订服务分类
     *
     * @param category 分类对象
     * @return boolean
     */
    boolean updateCategory(StoreBookingCategory category);

    /**
     * 删除预订服务分类
     *
     * @param id 分类ID
     * @return boolean
     */
    boolean deleteCategory(Integer id);

    /**
     * 更新预订服务分类排序
     *
     * @param storeId     门店ID
     * @param categoryIds 分类ID列表（按顺序排列）
     * @return boolean
     */
    boolean updateCategorySort(Integer storeId, List<Integer> categoryIds);

    /**
     * 更新预订服务分类显示状态
     *
     * @param id        分类ID
     * @param isDisplay 显示状态（0:隐藏, 1:显示）
     * @return boolean
     */
    boolean updateDisplayStatus(Integer id, Integer isDisplay);

    /**
     * 查询分类下是否有预订信息
     *
     * @param categoryId 分类ID
     * @param storeId    门店ID
     * @return true-有预订信息, false-没有预订信息
     */
    boolean hasReservationInCategory(Integer categoryId, Integer storeId);
}
