package com.red.circle.other.infra.database.rds.service.activity;

import com.red.circle.order.inner.model.enums.MonthlyRechargeType;

import java.math.BigDecimal;
import java.time.LocalDate;

/**
 * 用户活动充值记录服务
 */
public interface UserActivityRechargeService {

    /**
     * 记录用户充值
     *
     * @param userId 用户ID
     * @param amount 充值金额
     * @param type 充值类型
     */
    void recordRecharge(Long userId, BigDecimal amount, MonthlyRechargeType type);

    /**
     * 查询用户在活动中的总充值金额
     *
     * @param userId 用户ID
     * @param activityId 活动ID
     * @return 总金额
     */
    BigDecimal getUserTotalAmount(Long userId, Long activityId);

    /**
     * 查询用户在活动中的首次充值日期
     *
     * @param userId 用户ID
     * @param activityId 活动ID
     * @return 首次充值日期
     */
    LocalDate getFirstRechargeDate(Long userId, Long activityId);

    /**
     * 查询用户在活动中指定日期范围内的充值总额
     *
     * @param userId 用户ID
     * @param activityId 活动ID
     * @param startDate 开始日期（包含）
     * @param endDate 结束日期（包含）
     * @return 充值总额
     */
    BigDecimal getRechargeAmountByDateRange(Long userId, Long activityId, LocalDate startDate, LocalDate endDate);
}
