package shop.alien.store.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import shop.alien.entity.store.BathFacilityService;
import shop.alien.entity.store.vo.BathFacilityServiceCategoryVo;
import shop.alien.entity.store.vo.BathFacilityServiceVo;

import java.util.List;

/**
 * 洗浴设施及服务服务接口
 *
 * @author system
 * @since 2025-01-XX
 */
public interface BathFacilityServiceService extends IService<BathFacilityService> {

    /**
     * 分页查询洗浴设施及服务列表
     *
     * @param pageNum          页码
     * @param pageSize         页大小
     * @param storeId          门店ID
     * @param facilityCategory 设施分类
     * @return IPage<BathFacilityServiceVo>
     */
    IPage<BathFacilityServiceVo> getPageList(Integer pageNum, Integer pageSize, Integer storeId, Integer facilityCategory);

    /**
     * 查询洗浴设施及服务列表
     *
     * @param storeId          门店ID
     * @param facilityCategory 设施分类
     * @return List<BathFacilityServiceVo>
     */
    List<BathFacilityServiceVo> getList(Integer storeId, Integer facilityCategory);

    /**
     * 根据ID查询详情
     *
     * @param id 主键ID
     * @return BathFacilityServiceVo
     */
    BathFacilityServiceVo getDetail(Integer id);

    /**
     * 新增洗浴设施及服务
     *
     * @param facilityService 设施服务信息
     * @param imageList       图片列表
     * @return boolean
     */
    boolean saveFacilityService(BathFacilityService facilityService, List<String> imageList);

    /**
     * 修改洗浴设施及服务
     *
     * @param facilityService 设施服务信息
     * @param imageList       图片列表
     * @return boolean
     */
    boolean updateFacilityService(BathFacilityService facilityService, List<String> imageList);

    /**
     * 删除洗浴设施及服务
     *
     * @param id 主键ID
     * @return boolean
     */
    boolean deleteFacilityService(Integer id);

    /**
     * 查询指定店铺按分类汇总的设备信息
     * 包含每个分类的设备数量和设备列表（包括设备信息和图片）
     *
     * @param storeId 门店ID
     * @return List<BathFacilityServiceCategoryVo>
     */
    List<BathFacilityServiceCategoryVo> getCategorySummary(Integer storeId);

    IPage<BathFacilityServiceVo> getStorePageList(Integer pageNum, Integer pageSize, Integer storeId, Integer facilityCategory);

    BathFacilityServiceVo getStoreDetail(Integer id);

    List<BathFacilityServiceCategoryVo> getStoreCategorySummary(Integer storeId);
}

