package com.gxwebsoft.shop.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.gxwebsoft.common.core.web.PageResult;
import com.gxwebsoft.shop.entity.ShopSeckill;
import com.gxwebsoft.shop.entity.ShopSeckillOrder;
import com.gxwebsoft.shop.param.ShopSeckillParam;

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

/**
 * 秒杀活动Service
 *
 * @author 科技小王子
 * @since 2026-06-25
 */
public interface ShopSeckillService extends IService<ShopSeckill> {

    /**
     * 分页关联查询（含商品信息）
     */
    PageResult<ShopSeckill> pageRel(ShopSeckillParam param);

    /**
     * 关联查询全部
     */
    List<ShopSeckill> listRel(ShopSeckillParam param);

    /**
     * 根据ID关联查询
     */
    ShopSeckill getByIdRel(Integer seckillId);

    /**
     * 创建秒杀订单（核心业务）
     * 包含：活动校验、限购校验、原子扣库存、防重复提交
     *
     * @param seckillId  秒杀活动ID
     * @param goodsId    商品ID
     * @param skuId      SKU ID
     * @param quantity   购买数量
     * @param userId     用户ID
     * @param tenantId   租户ID
     * @return 秒杀订单
     */
    ShopSeckillOrder createSeckillOrder(Integer seckillId, Integer goodsId, Integer skuId,
                                         Integer quantity, Integer userId, Integer tenantId);

    /**
     * 查询用户的秒杀订单列表
     */
    PageResult<ShopSeckillOrder> mySeckillOrders(Integer userId, Integer page, Integer pageSize);

    /**
     * 获取秒杀时间段（场次）
     * 查询所有未结束的秒杀活动，按时间段分组
     */
    List<Map<String, Object>> getSeckillTimeSlots();

    /**
     * 更新过期的秒杀活动状态
     * 将已结束但状态仍为"进行中"的活动标记为"已结束"
     */
    void updateExpiredSeckillStatus();

}
