package com.liquidnet.service.goblin.service;

import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.goblin.dto.vo.GoblinSqbCouponVo;
import com.liquidnet.service.goblin.dto.vo.GoblinSqbOrderDetailVo;

import java.util.List;

public interface IGoblinSqbService {

    /**
     * 获取核销二维码（券码）
     *
     * @param userId  用户ID
     * @param orderId 本地订单ID
     * @return 券码信息（couponSn、couponQrCode、couponExpireTime）
     */
    ResponseDto<GoblinSqbCouponVo> queryCoupon(String userId, String orderId);

    /**
     * 申请退款
     *
     * @param userId  用户ID
     * @param orderId 本地订单ID
     * @param reason 退款原因
     * @return 退款结果
     */
    ResponseDto<Boolean> refund(String userId, String orderId, String reason);


    /**
     * 主动同步核销状态
     *
     * @param userId  用户ID
     * @param orderId 本地订单ID
     * @return 同步结果
     */
    ResponseDto<Boolean> syncCouponStatus(String userId, String orderId);

    /**
     * 演出结束自动退款（定时任务调用）
     * SQL 已联表过滤：收钱吧扩展单、主单已支付(2)、演出已结束、扩展未核销；循环内仅调 refund。
     *
     * @param performancesId 演出ID，传 null 或空则不按演出缩小（全库符合条件候选，慎用）
     * @return 处理结果摘要（成功/失败笔数）
     */
    ResponseDto<String> autoRefundByPerformance(String performancesId);


    /**
     * 查询用户收钱吧订单列表
     *
     * @param userId 用户ID
     * @return 收钱吧订单列表（仅 skuType=33 的订单，按下单时间倒序）
     */
    ResponseDto<List<GoblinSqbOrderDetailVo>> getOrderList(String userId);


    /**
     * 查询收钱吧订单详情
     *
     * @param userId  用户ID
     * @param orderId 本地订单ID
     * @return 订单详情（基础信息 + 收钱吧扩展信息）
     */
    ResponseDto<GoblinSqbOrderDetailVo> getOrderDetail(String userId, String orderId);
}
