package com.spot.service;

import com.spot.dto.mq.AssetChangeInfo;
import com.spot.dto.mq.TradeResult;

import java.util.List;

/**
 * 撮合结果处理服务接口
 * 负责处理撮合引擎推送的成交、撤单、挂单三类事件，更新订单/账户/流水，并返回需通知的变动信息
 *
 * @author jean
 * @date 2026-05-06
 */
public interface TradeResultService {

    /**
     * 处理成交结果
     * 更新 taker/maker 订单状态、账户余额、手续费，插入成交记录
     *
     * @param tradeResult 交易结果
     * @return 需发送 MQ 的变动信息列表（资产变动 + 订单变动）
     */
    List<AssetChangeInfo> processTradeResult(TradeResult tradeResult);

    /**
     * 处理撤单结果
     * 退还冻结余额，更新订单状态为已撤单，记录解冻流水
     *
     * @param tradeResult 交易结果
     * @return 需发送 MQ 的变动信息列表（资产变动 + 订单变动）
     */
    List<AssetChangeInfo> processCancelResult(TradeResult tradeResult);

    /**
     * 处理挂单结果（撮合引擎返回 NEW 状态时）
     * 更新订单状态为 NEW
     *
     * @param tradeResult 交易结果
     * @return 需发送 MQ 的变动信息列表（仅订单变动，通常为空）
     */
    List<AssetChangeInfo> processPendingOrder(TradeResult tradeResult);
}
