package com.market.model.ws;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;

import java.util.List;

/**
 * 前端 WebSocket 请求报文
 *
 * <pre>
 * 单个订阅:  {"sub": "market.btcusdt.kline.1m", "id": "1"}
 * 批量订阅:  {"sub": ["market.btcusdt.kline.1m", "market.ethusdt.kline.1m"], "id": "1"}
 * 取消订阅:  {"unsub": ["market.btcusdt.kline.1m"], "id": "2"}
 * 单个req:   {"req": "market.btcusdt.ticket", "id": "3"}
 * 批量req:   {"req": ["market.btcusdt.ticket", "market.ethusdt.ticket"], "id": "3"}
 * K线查询:   {"req": "market.btcusdt.kline.1m", "id": "4", "from": 1709856000000, "to": 1709942400000}
 * </pre>
 */
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class WsRequest {

    /** 订阅主题列表（也可传单个字符串，Jackson 自动转换） */
    @com.fasterxml.jackson.databind.annotation.JsonDeserialize(
            using = StringOrListDeserializer.class)
    private List<String> sub;

    /** 取消订阅主题列表 */
    @com.fasterxml.jackson.databind.annotation.JsonDeserialize(
            using = StringOrListDeserializer.class)
    private List<String> unsub;

    /** 查询主题列表（支持单个字符串或数组，Jackson 自动转换） */
    @com.fasterxml.jackson.databind.annotation.JsonDeserialize(
            using = StringOrListDeserializer.class)
    private List<String> req;

    /** 请求 ID，响应中原样返回 */
    private String id;

    /** K 线历史查询：开始时间（毫秒时间戳） */
    private Long from;

    /** K 线历史查询：结束时间（毫秒时间戳） */
    private Long to;
}
