package com.lingniu.ingest.session;

import java.time.Duration;
import java.util.concurrent.CompletableFuture;

/**
 * 下行命令调度器 SPI。
 *
 * <p>用于 command-gateway 把 HTTP 请求转为设备命令，等待设备应答。真正的实现需要与协议
 * 模块（如 jt808）的 Netty 通道绑定：按 sessionId 找到 Channel → 发送命令字节 → 用
 * {@code CompletableFuture + 序列号 map} 实现同步请求/应答。
 *
 * <p>当前阶段提供接口 + 占位实现，具体 Netty 绑定在 command-gateway / protocol-jt808
 * 的下一批次落地。
 */
public interface CommandDispatcher {

    /** 异步下发命令，不等应答。 */
    CompletableFuture<Void> notify(String sessionId, Object command);

    /** 同步下发命令并等待应答。 */
    <T> CompletableFuture<T> request(String sessionId, Object command, Class<T> responseType, Duration timeout);
}
