package com.dora.service;

import com.dora.dto.WithdrawDto;

/**
 * 提现服务接口
 */
public interface WithdrawService {

    /**
     * 提交提现申请
     * @param userId 用户ID
     * @param request 提现申请请求
     * @return 提现申请响应
     */
    WithdrawDto.WithdrawResponse submitWithdrawRequest(Long userId, WithdrawDto.WithdrawRequest request);

    /**
     * 获取用户提现记录列表
     * @param userId 用户ID
     * @param page 页码
     * @param size 每页大小
     * @return 提现记录列表响应
     */
    WithdrawDto.WithdrawListResponse getWithdrawList(Long userId, int page, int size);

    /**
     * 获取用户收益信息
     * @param userId 用户ID
     * @return 用户收益信息响应
     */
    WithdrawDto.UserRevenueResponse getUserRevenueInfo(Long userId);

    /**
     * 验证提现条件
     * @param userId 用户ID
     * @param amount 提现金额
     * @return 是否满足提现条件
     */
    boolean validateWithdrawCondition(Long userId, java.math.BigDecimal amount);

    /**
     * 获取用户基础收益信息
     * @param userId 用户ID
     * @return 基础收益信息响应
     */
    WithdrawDto.BasicRevenueResponse getBasicRevenueInfo(Long userId);

    /**
     * 获取工作流收益详情列表
     * @param userId 用户ID
     * @param page 页码
     * @param size 每页大小
     * @return 工作流收益列表响应
     */
    WithdrawDto.WorkflowRevenueListResponse getWorkflowRevenueDetails(Long userId, int page, int size);

    /**
     * 获取视频收益详情列表
     * @param userId 用户ID
     * @param page 页码
     * @param size 每页大小
     * @return 视频收益列表响应
     */
    WithdrawDto.VideoRevenueListResponse getVideoRevenueDetails(Long userId, int page, int size);

    /**
     * 获取推广收益信息
     * @param userId 用户ID
     * @return 推广收益响应
     */
    WithdrawDto.PromotionRevenueResponse getPromotionRevenueInfo(Long userId);
} 