package shop.alien.storeplatform.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import shop.alien.entity.store.LifeDiscountCoupon;
import shop.alien.entity.store.UserLoginInfo;
import shop.alien.entity.store.dto.LifeDiscountCouponDto;
import shop.alien.entity.store.vo.LifeCouponStatusVo;
import shop.alien.entity.store.vo.LifeDiscountCouponUserWebVo;
import shop.alien.entity.store.vo.LifeDiscountCouponVo;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 优惠券服务接口（平台端）
 * 提供优惠券相关的业务逻辑处理，包括优惠券的创建、更新、删除、查询等功能
 *
 * @author ssk
 * @since 2025-02-07
 */
public interface LifeDiscountCouponPlatformService extends IService<LifeDiscountCoupon> {

    /**
     * 发布优惠券
     * 创建新的优惠券，包括基本信息、规则配置、时间段限制等
     *
     * @param lifeDiscountCouponDto 优惠券信息对象
     * @return boolean 操作结果，true-成功，false-失败
     */
    boolean addDiscountCoupon(LifeDiscountCouponDto lifeDiscountCouponDto);

    /**
     * 修改优惠券
     * 更新已存在的优惠券信息，包括基本信息、规则配置、时间段限制等
     *
     * @param lifeDiscountCouponDto 优惠券信息对象
     * @return boolean 操作结果，true-成功，false-失败
     */
    boolean editDiscountCoupon(LifeDiscountCouponDto lifeDiscountCouponDto);

    /**
     * 修改优惠券库存数量
     * 更新指定优惠券的库存数量
     *
     * @param id 优惠券ID
     * @param singleQty 库存数量
     * @return boolean 操作结果，true-成功，false-失败
     */
    boolean updateCouponSingleQty(Integer id, Integer singleQty);

    /**
     * 删除优惠券
     * 根据优惠券ID删除优惠券及其关联的规则信息
     *
     * @param id 优惠券ID
     * @return boolean 操作结果，true-成功，false-失败
     */
    boolean deleteDiscountCoupon(Integer id);

    /**
     * 切换优惠券进行状态
     * 切换优惠券的可领取状态（启用/暂停）
     *
     * @param counponId 优惠券ID
     * @return boolean 操作结果，true-成功，false-失败
     */
    boolean cutDiscountCouponStatus(String counponId);

    /**
     * 获取该优惠券的明细信息
     * 根据优惠券ID查询优惠券的详细信息，包括规则配置、时间段限制等
     *
     * @param counponId 优惠券ID
     * @param userLoginInfo 当前登录用户信息
     * @return LifeDiscountCouponVo 优惠券详情对象
     */
    LifeDiscountCouponVo getCounponDetailById(String counponId, UserLoginInfo userLoginInfo);

    /**
     * 获取所有优惠券列表（分页）
     * 根据条件查询店铺的优惠券列表，支持按名称、状态等条件筛选
     *
     * @param storeId 店铺ID
     * @param userLoginInfo 当前登录用户信息
     * @param page 页码
     * @param size 每页数量
     * @param couponName 优惠券名称（模糊查询）
     * @param couponsFromType 优惠券来源类型
     * @param couponStatus 优惠券状态(1:进行中, 2:已结束, 3:已暂停)
     * @param discountCouponType 优惠券类型：1=满减券，2=折扣券，null=全部优惠券
     * @return IPage<LifeDiscountCouponVo> 分页优惠券列表
     */
    IPage<LifeDiscountCouponVo> getStoreAllCouponList(String storeId, UserLoginInfo userLoginInfo, int page, int size, String couponName, Integer couponsFromType, Integer couponStatus, Integer discountCouponType);

}

