package shop.alien.store.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
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.LifeDiscountCouponPlatformVo;
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;

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

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * 获取平台优惠券列表
     *
     * @param pageNum    分页页码
     * @param pageSize   分页大小
     * @param name       优惠券名称
     * @param createDate 创建时间
     * @param couponType 类型:(1:优惠券, 2:红包, 3:平台优惠券)
     * @return IPage<LifeDiscountCouponPlatformVo>
     */
    IPage<LifeDiscountCoupon> getPlatformCouponList(Integer pageNum, Integer pageSize, String name, String createDate, Integer couponType);

    /**
     * 新增平台优惠券
     *
     * @param lifeDiscountCoupon 优惠券实体
     * @return boolean
     */
    boolean addPlatformCoupon(@RequestBody LifeDiscountCoupon lifeDiscountCoupon);


    /**
     * 查询平台优惠券详情
     *
     * @param id 柱间, 妈的就叫这个吧! 哈西辣妈!
     * @return LifeDiscountCouponPlatformVo
     */
    LifeDiscountCoupon getOnePlatformCoupon(Integer id);

    /**
     * 发放平台优惠券
     *
     * @param userIds  用户主键List
     * @param couponId 优惠券id
     * @return boolean
     */
    boolean issuePlatformCoupon(List<Integer> userIds, Integer couponId);

    /**
     * 收回平台优惠券
     *
     * @param couponId 优惠券id
     * @return boolean
     */
    boolean recoverPlatformCoupon(Integer couponId);

    /**
     * 删除平台优惠券
     *
     * @param couponId 优惠券id
     * @return boolean
     */
    boolean deletePlatformCoupon(Integer couponId);

    /**
     * 分页查询该券发放记录
     *
     * @param pageNum  分页页码
     * @param pageSize 分页大小
     * @param userName 用户名
     * @param phone    手机号
     * @param couponId 优惠券id
     * @return IPage<LifeDiscountCouponUserWebVo>
     */
    IPage<LifeDiscountCouponUserWebVo> getPlatformCouponLogList(Integer pageNum, Integer pageSize, String userName, String phone, Integer couponId);

    /**
     * 查询平台优惠券
     *
     * @param couponType 优惠券类型
     * @return List<LifeDiscountCoupon>
     */
    List<LifeDiscountCoupon> getPlatformCoupon(Integer couponId, Integer couponType);
}
