package com.fs.course.service;

import com.fs.course.config.CourseRandomRedPacketConfig;
import com.fs.course.domain.FsUserCourseVideo;
import com.fs.course.param.CourseRandomRedPacketBatchSaveParam;
import com.fs.course.param.CourseRandomRedPacketCopyParam;

import java.math.BigDecimal;
import java.util.List;

/**
 * 课程随机红包配置服务接口
 */
public interface ICourseRandomRedPacketService {

    /**
     * 根据课程项目project获取红包配置，无配置返回null
     */
    CourseRandomRedPacketConfig getConfigByProject(Long project);

    /**
     * 保存/更新课程随机红包配置
     */
    void saveConfig(CourseRandomRedPacketConfig config);

    /**
     * 批量保存：同一套配置应用到多个课程项目
     */
    void batchSaveConfig(CourseRandomRedPacketBatchSaveParam param);

    /**
     * 复制配置：将源项目配置复制到多个目标项目
     */
    void copyConfig(CourseRandomRedPacketCopyParam param);

    /**
     * 查询所有已配置的课程项目
     */
    List<CourseRandomRedPacketConfig> listConfiguredProjects();

    /**
     * 计算最终红包金额：优先使用课程红包配置，异常时返回基础金额兜底
     *
     * @param baseAmount         原始基础红包金额
     * @param courseId           课程ID，用于查询项目project
     * @param companyId          企业ID
     * @param video              视频信息，用于兼容旧版红包规则
     * @param allowLegacyRandom  无课程红包配置时是否启用旧版全局红包逻辑
     */
    BigDecimal resolveAmount(BigDecimal baseAmount, Long courseId, Long companyId,
                             FsUserCourseVideo video, boolean allowLegacyRandom);
}
