package com.snack.server.module.seckill.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.snack.server.module.seckill.dto.req.SeckillActivitySaveReq;
import com.snack.server.module.seckill.dto.req.SeckillBuyReq;
import com.snack.server.module.seckill.dto.req.SeckillProductAddReq;
import com.snack.server.module.seckill.entity.SeckillActivity;
import com.snack.server.module.seckill.vo.SeckillActivityVO;
import com.snack.server.module.seckill.vo.SeckillResultVO;

import java.util.List;

/**
 * 抢购业务接口
 */
public interface SeckillService {

    // ==================== 用户端 ====================

    /**
     * 获取进行中 / 即将开始的抢购活动
     */
    List<SeckillActivityVO> listActiveActivities();

    /**
     * 获取活动详情（含商品）
     */
    SeckillActivityVO getActivityDetail(Long activityId);

    /**
     * 抢购（核心流程）
     * @return 排队号 orderNo，前端轮询用
     */
    String seckillBuy(SeckillBuyReq req);

    /**
     * 查询抢购结果（轮询接口）
     */
    SeckillResultVO queryResult(String orderNo);

    // ==================== 管理端 ====================

    /**
     * 管理端活动分页
     */
    Page<SeckillActivity> pageActivities(Long current, Long size, Integer status);

    /**
     * 创建活动
     */
    Long createActivity(SeckillActivitySaveReq req);

    /**
     * 更新活动
     */
    void updateActivity(SeckillActivitySaveReq req);

    /**
     * 删除活动
     */
    void deleteActivity(Long id);

    /**
     * 手动结束活动
     */
    void forceEndActivity(Long id);

    /**
     * 预热活动（同步库存到 Redis）
     */
    void warmupActivity(Long id);

    /**
     * 给活动添加商品
     */
    Long addProduct(SeckillProductAddReq req);

    /**
     * 删除活动商品
     */
    void removeProduct(Long seckillProductId);
}
