package shop.alien.storeplatform.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import shop.alien.entity.result.R;
import shop.alien.entity.store.EssentialHolidayComparison;
import shop.alien.entity.store.LifeCoupon;
import shop.alien.entity.store.vo.LifeCouponStatusVo;
import shop.alien.entity.store.vo.LifeDiscountCouponVo;
import shop.alien.entity.storePlatform.vo.LifeCouponPlatformDto;

import java.util.Map;

/**
 * 优惠券服务接口（平台端）
 * 提供优惠券相关的业务操作接口，包括优惠券的创建、更新、删除、查询、核销等功能
 * 支持优惠券库存管理、状态管理、节假日管理等操作
 *
 * @author alien-cloud
 * @date 2025-11-18
 */
public interface LifeCouponPlatformService extends IService<LifeCoupon> {

    /**
     * 新增或更新优惠券
     * 根据优惠券是否存在ID判断是新增还是更新操作
     *
     * @param lifeCoupon 优惠券对象
     * @return LifeCoupon 保存后的优惠券信息
     * @author alien-cloud
     * @date 2025-11-18
     */
    LifeCoupon addOrUpdateCoupon(LifeCoupon lifeCoupon);

    /**
     * 修改库存数量
     * 更新指定优惠券的库存数量
     *
     * @param id 优惠券ID
     * @param singleQty 库存数量
     * @return boolean 更新是否成功
     * @author alien-cloud
     * @date 2025-11-18
     */
    boolean updateCouponSingleQty(Integer id, Integer singleQty);

    /**
     * 删除优惠券
     * 根据优惠券ID删除优惠券信息
     *
     * @param id 优惠券ID
     * @return boolean 删除是否成功
     * @author alien-cloud
     * @date 2025-11-18
     */
    boolean deleteCoupon(Integer id);

    /**
     * 分页查询优惠券列表
     * 支持多条件筛选查询优惠券列表
     *
     * @param page 页码
     * @param size 每页数量
     * @param storeId 商户ID
     * @param status 状态
     * @param name 优惠券名称
     * @return IPage<LifeCouponPlatformDto> 分页优惠券列表
     * @author alien-cloud
     * @date 2025-11-18
     */
    IPage<LifeCouponPlatformDto> getCouponList(int page, int size, String storeId, String status, String name);

    /**
     * 代金券列表，返回与优惠券一致的数据结构（LifeDiscountCouponVo，type=4），供 getCouponList 接口 couponType=1 使用
     */
    IPage<LifeDiscountCouponVo> getCouponListAsDiscountVo(int page, int size, String storeId, String status, String name);

    /**
     * 更新优惠券状态
     * 修改优惠券的状态，如上架、下架等
     *
     * @param id 优惠券ID
     * @param status 状态值
     * @return int 更新的记录数
     * @author alien-cloud
     * @date 2025-11-18
     */
    int updateCoupon(String id, Integer status);



    /**
     * 分页查询节假日列表
     * 支持按年份、开关状态、节假日名称筛选
     *
     * @param page 页码
     * @param size 每页数量
     * @param year 年份
     * @param openFlag 开关状态
     * @param holidayName 节假日名称
     * @return IPage<EssentialHolidayComparison> 分页节假日列表
     * @author alien-cloud
     * @date 2025-11-18
     */
    IPage<EssentialHolidayComparison> getHolidayList(int page, int size, String year, String openFlag, String holidayName);

    /**
     * 保存节假日信息
     * 新增或更新节假日配置
     *
     * @param essentialHolidayComparison 节假日对象
     * @return boolean 保存是否成功
     * @author alien-cloud
     * @date 2025-11-18
     */
    boolean saveHoliday(EssentialHolidayComparison essentialHolidayComparison);

    /**
     * 删除节假日
     * 根据ID删除指定的节假日配置
     *
     * @param id 节假日ID
     * @return boolean 删除是否成功
     * @author alien-cloud
     * @date 2025-11-18
     */
    boolean delHoliday(String id);

    /**
     * 按年份删除节假日
     * 删除指定年份的所有节假日配置
     *
     * @param year 年份
     * @return boolean 删除是否成功
     * @author alien-cloud
     * @date 2025-11-18
     */
    boolean delHolidayByYear(String year);

    /**
     * 开启或关闭节假日
     * 切换指定节假日的开关状态
     *
     * @param id 节假日ID
     * @return boolean 操作是否成功
     * @author alien-cloud
     * @date 2025-11-18
     */
    boolean openCloseHoliday(String id);

}

