package com.ycwl.basic.pricing.service;

import com.github.pagehelper.PageInfo;
import com.ycwl.basic.pricing.dto.CouponClaimResult;
import com.ycwl.basic.pricing.dto.req.SceneCouponClaimReq;
import com.ycwl.basic.pricing.dto.req.SceneCouponConfigPageReq;
import com.ycwl.basic.pricing.dto.req.SceneCouponConfigSaveReq;
import com.ycwl.basic.pricing.dto.resp.SceneCouponAvailableResp;
import com.ycwl.basic.pricing.dto.resp.SceneCouponConfigResp;

import java.util.List;

/**
 * 场景优惠券服务接口
 */
public interface ISceneCouponService {

    // ==================== 后台管理接口 ====================

    /**
     * 分页查询场景优惠券配置
     *
     * @param req 查询请求
     * @return 分页结果
     */
    PageInfo<SceneCouponConfigResp> pageConfig(SceneCouponConfigPageReq req);

    /**
     * 获取配置详情
     *
     * @param id 配置ID
     * @return 配置详情
     */
    SceneCouponConfigResp getConfigDetail(Long id);

    /**
     * 保存配置（新增/更新）
     *
     * @param req 保存请求
     * @return 是否成功
     */
    boolean saveConfig(SceneCouponConfigSaveReq req);

    /**
     * 删除配置
     *
     * @param id 配置ID
     * @return 是否成功
     */
    boolean deleteConfig(Long id);

    /**
     * 获取所有已配置的场景列表
     *
     * @return 场景标识列表
     */
    List<String> listSceneKeys();

    /**
     * 根据场景和景区查询配置列表
     *
     * @param sceneKey 场景标识
     * @param scenicId 景区ID
     * @return 配置列表
     */
    List<SceneCouponConfigResp> listBySceneKeyAndScenicId(String sceneKey, Long scenicId);

    // ==================== 前端领取接口 ====================

    /**
     * 查询场景下可领取的优惠券列表
     *
     * @param sceneKey 场景标识
     * @param scenicId 景区ID
     * @param userId   用户ID（用于判断用户已领取数量）
     * @return 可领取优惠券列表
     */
    List<SceneCouponAvailableResp> getAvailableCoupons(String sceneKey, Long scenicId, Long userId);

    /**
     * 领取场景优惠券
     *
     * @param req    领取请求
     * @param userId 用户ID
     * @return 领取结果列表
     */
    List<CouponClaimResult> claimCoupons(SceneCouponClaimReq req, Long userId);
}
