package shop.alien.store.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.LifeDiscountCouponVo;

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

/**
 * <p>
 * 优惠券表 服务类
 * </p>
 *
 * @author ssk
 * @since 2025-02-07
 */
public interface LifeDiscountCouponService extends IService<LifeDiscountCoupon> {

    /**
     * 发布优惠券
     */
    public boolean addDiscountCoupon(LifeDiscountCouponDto lifeDiscountCouponDto);

    /**
     * 修改优惠券
     */
    public boolean editDiscountCoupon(LifeDiscountCouponDto lifeDiscountCouponDto);

    /**
     * 删除优惠券
     */
    public boolean deleteDiscountCoupon(Integer id);

    /**
     * 切换优惠券进行状态
     */
    public boolean cutDiscountCouponStatus(String counponId);

    /**
     * 获取该优惠券的明细信息
     */
    public LifeDiscountCouponVo getCounponDetailById(String counponId, UserLoginInfo userLoginInfo);

    /**
     * 获取该用户该店铺优惠券列表
     */
    public List<LifeDiscountCouponVo> getStoreUserCouponList(String storeId, UserLoginInfo userLoginInfo);

    /**
     * 获取该用户该店铺优惠券列表
     */
    public Map getStoreUserUsableCouponList(String storeId, UserLoginInfo userLoginInfo, BigDecimal amount);

    /**
     * 获取该用户优惠券列表
     */
    public List<LifeDiscountCouponVo> getUserCouponList(UserLoginInfo userLoginInfo, int page, int size, String tabType);

    /**
     * 获取所有优惠券列表（分页）
     */
    public IPage<LifeDiscountCouponVo> getStoreAllCouponList(String storeId, UserLoginInfo userLoginInfo, int page, int size, String couponName, String tab, int couponsFromType, int couponStatus);

    /**
     * 获取所有优惠券列表（不分页）
     */
    public List<LifeDiscountCouponVo> getStoreAllCouponListPaginateNot(String status, String storeId, UserLoginInfo userLoginInfo, int couponStatus);

    /**
     * 获取优惠券规则
     */
    public String getCouponRule(String couponId, UserLoginInfo userLoginInfo);

    /**
     * 获取优惠券状态
     */
    public LifeCouponStatusVo getCouponStatus(String couponId);
}
