package com.ycwl.basic.pricing.service;

import com.github.pagehelper.PageInfo;
import com.ycwl.basic.pricing.entity.PriceCouponClaimRecord;
import com.ycwl.basic.pricing.entity.PriceCouponConfig;
import com.ycwl.basic.pricing.enums.CouponStatus;

import java.util.List;
import java.util.Map;

/**
 * 优惠券管理服务接口（管理端）
 */
public interface ICouponManagementService {
    
    // ==================== 优惠券配置管理 ====================
    
    /**
     * 创建优惠券配置
     */
    Long createCouponConfig(PriceCouponConfig config);
    
    /**
     * 更新优惠券配置
     */
    boolean updateCouponConfig(PriceCouponConfig config);
    
    /**
     * 删除优惠券配置
     */
    boolean deleteCouponConfig(Long id);
    
    /**
     * 启用/禁用优惠券配置
     */
    boolean updateCouponConfigStatus(Long id, Boolean isActive);
    
    /**
     * 查询所有优惠券配置（包含禁用的）
     */
    List<PriceCouponConfig> getAllCouponConfigs();
    
    /**
     * 分页查询优惠券配置
     */
    PageInfo<PriceCouponConfig> getCouponConfigsPage(Integer pageNum, Integer pageSize, 
                                                     Boolean isActive, String couponName, String scenicId);
    
    /**
     * 根据状态查询优惠券配置
     */
    List<PriceCouponConfig> getCouponConfigsByStatus(Boolean isActive);
    
    /**
     * 根据ID查询优惠券配置
     */
    PriceCouponConfig getCouponConfigById(Long id);
    
    // ==================== 优惠券领取记录查询 ====================
    
    /**
     * 查询所有优惠券领取记录
     */
    List<PriceCouponClaimRecord> getAllClaimRecords();
    
    /**
     * 分页查询优惠券领取记录
     */
    PageInfo<PriceCouponClaimRecord> getClaimRecordsPage(Integer pageNum, Integer pageSize, 
                                                         Long userId, Long couponId, CouponStatus status,
                                                         String startTime, String endTime, String scenicId);
    
    /**
     * 根据用户ID查询优惠券领取记录
     */
    List<PriceCouponClaimRecord> getClaimRecordsByUserId(Long userId);
    
    /**
     * 根据优惠券ID查询领取记录
     */
    List<PriceCouponClaimRecord> getClaimRecordsByCouponId(Long couponId);
    
    /**
     * 根据状态查询领取记录
     */
    List<PriceCouponClaimRecord> getClaimRecordsByStatus(CouponStatus status);
    
    /**
     * 查询优惠券使用统计
     */
    Map<String, Object> getCouponUsageStats(Long couponId);
    
    /**
     * 查询优惠券配置详细统计
     */
    Map<String, Object> getCouponDetailStats(Long couponId);
    
    /**
     * 查询时间范围内的统计数据
     */
    Map<String, Object> getPeriodStats(String startDate, String endDate, String scenicId);
    
    /**
     * 查询所有优惠券的使用统计概览
     */
    List<Map<String, Object>> getAllCouponUsageOverview();
    
    /**
     * 查询景区优惠券统计
     */
    Map<String, Object> getScenicCouponStats(String scenicId);
}