package com.ycwl.basic.pricing.service;

import com.github.pagehelper.PageInfo;
import com.ycwl.basic.pricing.dto.req.VoucherUsageHistoryReq;
import com.ycwl.basic.pricing.dto.resp.VoucherUsageRecordResp;
import com.ycwl.basic.pricing.dto.resp.VoucherUsageStatsResp;

import java.util.List;

/**
 * 券码使用记录服务接口
 */
public interface IVoucherUsageService {
    
    /**
     * 分页查询券码使用记录
     * 
     * @param req 查询请求
     * @return 分页结果
     */
    PageInfo<VoucherUsageRecordResp> getUsageHistory(VoucherUsageHistoryReq req);
    
    /**
     * 获取指定券码的使用记录
     * 
     * @param voucherCode 券码
     * @return 使用记录列表
     */
    List<VoucherUsageRecordResp> getUsageRecordsByCode(String voucherCode);
    
    /**
     * 获取用户在指定景区的券码使用记录
     * 
     * @param faceId 用户faceId
     * @param scenicId 景区ID
     * @return 使用记录列表
     */
    List<VoucherUsageRecordResp> getUserUsageRecords(Long faceId, Long scenicId);
    
    /**
     * 获取券码使用统计信息
     * 
     * @param voucherCode 券码
     * @return 统计信息
     */
    VoucherUsageStatsResp getUsageStats(String voucherCode);
    
    /**
     * 获取批次券码使用统计信息
     * 
     * @param batchId 批次ID
     * @return 统计信息列表
     */
    List<VoucherUsageStatsResp> getBatchUsageStats(Long batchId);
    
    /**
     * 记录券码使用（内部方法，由VoucherService调用）
     * 
     * @param voucherCode 券码
     * @param faceId 用户faceId
     * @param orderId 订单ID
     * @param discountAmount 优惠金额
     * @param remark 备注
     */
    void recordVoucherUsage(String voucherCode, Long faceId, String orderId, 
                           java.math.BigDecimal discountAmount, String remark);
}