package com.yupi.project.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.yupi.project.model.entity.ActivationCode;
import com.yupi.project.model.dto.activationcode.ActivationCodeQueryRequest;
// TODO: Import Page, ActivationCodeVO, ActivationCodeQueryRequest when created

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 激活码服务接口
 */
public interface ActivationCodeService extends IService<ActivationCode> {

    /**
     * (管理员) 批量生成激活码。
     *
     * @param count       生成数量
     * @param value       单个激活码的面值
     * @param expireTime  过期时间 (null 表示永不过期)
     * @param batchId     批次ID (可由调用者传入或在Service中生成)
     * @return 生成的激活码列表
     * @throws Exception 如果生成过程中发生错误
     */
    List<ActivationCode> generateCodes(int count, BigDecimal value, LocalDateTime expireTime, String batchId) throws Exception;

    /**
     * (用户) 兑换激活码。
     *
     * @param currentUserId 当前登录用户的ID
     * @param code          激活码字符串
     * @return true 如果兑换成功，并增加了用户余额
     * @throws com.yupi.project.exception.BusinessException 如果激活码无效、已使用、已过期或兑换失败
     */
    boolean redeemCode(Long currentUserId, String code);

    /**
     * 构建查询条件
     *
     * @param activationCodeQueryRequest 查询请求
     * @return QueryWrapper
     */
    QueryWrapper<ActivationCode> getQueryWrapper(ActivationCodeQueryRequest activationCodeQueryRequest);

    /**
     * 根据ID删除激活码 (逻辑删除)
     *
     * @param codeId 激活码ID
     * @return 是否删除成功
     */
    boolean deleteCode(Long codeId);

    // TODO: Add method for listing codes (admin)
    // Page<ActivationCodeVO> listCodes(ActivationCodeQueryRequest queryRequest);
} 