package shop.alien.store.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import shop.alien.entity.store.BarPerformance;
import shop.alien.entity.store.vo.BarPerformanceDetailVo;

import java.util.Date;

/**
 * 酒吧演出服务接口
 * 提供酒吧演出的CRUD、审核、上下线等核心业务功能
 *
 * @author assistant
 * @since 2025-12-17
 */
public interface BarPerformanceService {

    /**
     * 获取酒吧演出列表（分页）
     *
     * @param page    分页页数
     * @param size    分页条数
     * @param status  演出状态
     * @return 演出列表
     */
    IPage<BarPerformance> getBarPerformanceList(int page, int size, String status);

    /**
     * 新增或更新酒吧演出
     * 审核不通过时也会保存数据，但会标记为审核拒绝状态
     *
     * @param barPerformance 演出信息
     * @return 保存后的演出对象（包含ID和审核状态）
     */
    BarPerformance addOrUpdateBarPerformance(BarPerformance barPerformance);

    /**
     * 获取酒吧演出详情
     *
     * @param id 演出ID
     * @return 演出详情（包含表演嘉宾信息）
     */
    BarPerformanceDetailVo getBarPerformanceDetail(Integer id);

    /**
     * 删除酒吧演出
     *
     * @param id 演出ID
     * @return 操作结果
     */
    Integer deleteBarPerformance(Integer id);

    /**
     * 设置演出上线状态
     *
     * @param id          演出ID
     * @param onlineStatus 上线状态（0-下线，1-上线）
     * @return 操作结果
     */
    Integer setOnlineStatus(Integer id, Integer onlineStatus);

    /**
     * 根据门店ID查询演出列表
     *
     * @param page    分页页数
     * @param size    分页条数
     * @param storeId 门店ID
     * @param status  演出状态
     * @return 演出列表
     */
    IPage<BarPerformance> queryPerformanceListByStoreId(Integer page, Integer size, Integer storeId, String status);

    /**
     * 根据门店ID和分类查询演出列表
     *
     * @param page    分页页数
     * @param size    分页条数
     * @param storeId 门店ID
     * @param reviewStatus 审核状态（0-待审核 1-审核通过 2-审核拒绝）
     * @param category 演出分类（all-全部, not_started-未开始, in_progress-进行中, ended-已结束）
     * @param performanceName 演出名称（可选，支持模糊搜索）
     * @param performanceType 演出类型（0-特邀演出，1-常规演出）
     * @param onlineStatus 上线状态（0-下线，1-上线）
     * @param startCreatedTime 创建时间开始
     * @param endCreatedTime 创建时间结束
     * @return 演出列表
     */
    IPage<BarPerformance> queryPerformanceListByStoreIdAndCategory(Integer page, Integer size, Integer storeId, Integer reviewStatus, String category, String performanceName, Integer performanceType, Integer onlineStatus, Date startCreatedTime, Date endCreatedTime);
}
