package com.dora.service;

import com.dora.dto.AdminGiftCodeDto;
import com.dora.dto.ApiResponse;

/**
 * 管理端礼品码服务接口
 */
public interface AdminGiftCodeService {

    /**
     * 分页查询礼品码列表
     * @param request 查询请求
     * @return 礼品码列表
     */
    ApiResponse<AdminGiftCodeDto.GiftCodeListResponse> getGiftCodeList(AdminGiftCodeDto.GiftCodeListRequest request);

    /**
     * 获取礼品码详情
     * @param id 礼品码ID
     * @return 礼品码详情
     */
    ApiResponse<AdminGiftCodeDto.GiftCodeDetailResponse> getGiftCodeDetail(Long id);

    /**
     * 创建礼品码
     * @param request 创建请求
     * @return 创建结果
     */
    ApiResponse<String> createGiftCode(AdminGiftCodeDto.CreateGiftCodeRequest request);

    /**
     * 更新礼品码
     * @param request 更新请求
     * @return 更新结果
     */
    ApiResponse<String> updateGiftCode(AdminGiftCodeDto.UpdateGiftCodeRequest request);

    /**
     * 更新礼品码状态
     * @param request 状态更新请求
     * @return 更新结果
     */
    ApiResponse<String> updateGiftCodeStatus(AdminGiftCodeDto.UpdateGiftCodeStatusRequest request);

    /**
     * 删除礼品码
     * @param id 礼品码ID
     * @return 删除结果
     */
    ApiResponse<String> deleteGiftCode(Long id);

    /**
     * 批量操作礼品码
     * @param request 批量操作请求
     * @return 操作结果
     */
    ApiResponse<String> batchOperateGiftCodes(AdminGiftCodeDto.BatchOperationRequest request);

    /**
     * 分页查询使用记录
     * @param request 查询请求
     * @return 使用记录列表
     */
    ApiResponse<AdminGiftCodeDto.UsageListResponse> getUsageList(AdminGiftCodeDto.UsageListRequest request);

    /**
     * 获取礼品码统计信息
     * @return 统计信息
     */
    ApiResponse<AdminGiftCodeDto.GiftCodeStatisticsResponse> getGiftCodeStatistics();

    /**
     * 获取已过期的礼品码列表
     * @param page 页码
     * @param size 每页大小
     * @return 已过期礼品码列表
     */
    ApiResponse<AdminGiftCodeDto.GiftCodeListResponse> getExpiredGiftCodes(Integer page, Integer size);

    /**
     * 修复礼品码使用次数数据一致性
     * @return 修复结果
     */
    ApiResponse<String> fixUsageCountConsistency();
}
