package com.dora.service;

import com.dora.entity.ContentRevenueStage;

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

/**
 * 内容收益阶段服务接口
 */
public interface ContentRevenueStageService {

    /**
     * 检查并更新视频观看收益阶段
     * @param videoId 视频ID
     * @param ownerId 视频创建者ID
     * @param currentViewCount 当前观看次数
     * @return 新达到的收益阶段列表
     */
    List<ContentRevenueStage> checkAndUpdateVideoRevenueStages(Long videoId, Long ownerId, Integer currentViewCount);

    /**
     * 检查视频是否为工作流视频(不参与收益分成)
     * @param vodVideoId 阿里云视频ID
     * @return true-工作流视频, false-普通视频
     */
    boolean isWorkflowVideo(String vodVideoId);

    /**
     * 检查视频是否对免费用户开放(免费视频不参与收益分成)
     * @param videoId 视频ID
     * @param courseId 课程ID (可选)
     * @return true-免费用户可观看, false-需要付费权限
     */
    boolean isFreeAccessVideo(Long videoId, Long courseId);

    /**
     * 初始化视频收益阶段配置
     * @param videoId 视频ID
     * @param ownerId 视频创建者ID
     */
    void initializeVideoRevenueStages(Long videoId, Long ownerId);

    /**
     * 获取视频收益阶段列表
     * @param videoId 视频ID
     * @return 收益阶段列表
     */
    List<ContentRevenueStage> getVideoRevenueStages(Long videoId);

    /**
     * 计算已获得的总收益
     * @param userId 用户ID
     * @param contentType 内容类型 (2=视频)
     * @return 总收益金额
     */
    BigDecimal calculateTotalRevenue(Long userId, Integer contentType);

    /**
     * 检查并更新工作流收益阶段
     * @param workflowId 工作流ID
     * @param ownerId 工作流创建者ID
     * @param currentCopyCount 当前使用次数（复制+下载）
     * @return 新达到的收益阶段列表
     */
    List<ContentRevenueStage> checkAndUpdateWorkflowRevenueStages(Long workflowId, Long ownerId, Integer currentCopyCount);

    /**
     * 初始化工作流收益阶段配置
     * @param workflowId 工作流ID
     * @param ownerId 工作流创建者ID
     */
    void initializeWorkflowRevenueStages(Long workflowId, Long ownerId);
}
