package com.lesingle.edu.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.lesingle.edu.dto.response.CourseCollectionResponse;
import com.lesingle.edu.dto.response.CoursePackageResponse;
import com.lesingle.edu.dto.response.PackageFilterMetaResponse;
import com.lesingle.edu.entity.CourseCollection;

import java.time.LocalDate;
import java.util.List;

/**
 * 课程套餐服务接口（两层结构 - 最上层）
 */
public interface CourseCollectionService extends IService<CourseCollection> {

    /**
     * 查询租户的课程套餐列表
     */
    List<CourseCollectionResponse> findTenantCollections(Long tenantId);

    /**
     * 获取课程套餐详情（包含课程包列表）
     */
    CourseCollectionResponse getCollectionDetail(Long collectionId);

    /**
     * 分页查询课程套餐
     */
    Page<CourseCollectionResponse> pageCollections(Integer pageNum, Integer pageSize, String status, String gradeLevels);

    /**
     * 获取课程套餐下的课程包列表
     */
    List<CoursePackageResponse> getPackagesByCollection(Long collectionId);

    /**
     * 获取课程套餐下的课程包列表（支持筛选）
     * @param collectionId 套餐ID
     * @param grade 年级筛选
     * @param lessonType 课程配置筛选（INTRODUCTION、COLLECTIVE、HEALTH、LANGUAGE、SCIENCE、SOCIAL、ART）
     * @param themeId 课程包主题筛选
     * @param keyword 关键词搜索
     * @return 课程包列表
     */
    List<CoursePackageResponse> getPackagesByCollection(Long collectionId, String grade, String lessonType, Long themeId, String keyword);

    /**
     * 获取套餐的筛选元数据（年级、课程配置选项）
     * @param collectionId 套餐ID
     * @return 筛选元数据
     */
    PackageFilterMetaResponse getPackageFilterMeta(Long collectionId);

    /**
     * 创建课程套餐
     */
    CourseCollectionResponse createCollection(String name, String description, Long price,
                                             Long discountPrice, String discountType, String[] gradeLevels);

    /**
     * 设置课程套餐的课程包
     */
    void setCollectionPackages(Long collectionId, List<Long> packageIds);

    /**
     * 更新课程套餐
     */
    CourseCollectionResponse updateCollection(Long id, String name, String description, Long price,
                                             Long discountPrice, String discountType, String[] gradeLevels);

    /**
     * 删除课程套餐
     */
    void deleteCollection(Long id);

    /**
     * 发布课程套餐
     */
    void publishCollection(Long id);

    /**
     * 下架课程套餐
     */
    void archiveCollection(Long id);

    /**
     * 重新发布课程套餐
     */
    void republishCollection(Long id);

    /**
     * 撤销审核
     */
    void withdrawCollection(Long id);

    /**
     * 提交课程套餐审核
     */
    void submitCollection(Long id);

    /**
     * 审核驳回课程套餐
     */
    void rejectCollection(Long id, String comment);

    /**
     * 续费租户课程套餐
     */
    void renewTenantCollection(Long tenantId, Long collectionId, LocalDate endDate, Long pricePaid);
}
