/// WebSocket 配置
/// 非单例，由 App 层构造并注入到 SocketClient
///
/// 与 [ApiConfig] 设计一致：SDK 不依赖 Flutter，
/// 网络检测、生命周期等业务逻辑通过回调注入。
class SocketConfig {
  /// 应用层心跳间隔（定时发送 "ping" 字符串）
  final Duration heartbeatInterval;

  /// 底层 WebSocket ping 间隔（Dart WebSocket 自动管理）
  final Duration pingInterval;

  /// Pong 超时（超过此时间未收到 pong 则判定连接断开）
  final Duration pongTimeout;

  /// 连接超时
  final Duration connectTimeout;

  /// 最大重连次数（0 = 不重连）
  final int maxReconnectAttempts;

  /// 最大重连延迟（指数退避上限）
  final Duration maxReconnectDelay;

  /// 是否自动重连
  final bool autoReconnect;

  /// 日志输出回调（与 ApiConfig.onLog 同签名）
  final void Function(String message, {String? tag})? onLog;

  /// 网络可用性查询（App 层注入，SDK 在重连前调用）
  /// 返回 true 表示网络可用，可以尝试重连
  final Future<bool> Function()? onCheckNetworkAvailable;

  SocketConfig({
    this.heartbeatInterval = const Duration(seconds: 10),
    this.pingInterval = const Duration(seconds: 5),
    this.pongTimeout = const Duration(seconds: 10),
    this.connectTimeout = const Duration(seconds: 15),
    this.maxReconnectAttempts = 5,
    this.maxReconnectDelay = const Duration(seconds: 30),
    this.autoReconnect = true,
    this.onLog,
    this.onCheckNetworkAvailable,
  });
}
