export default  class WebSocketService {
  constructor(url) {
    this.socket = null;
    this.url = url;
    // 心跳定时器
    this.heartbeatTimer = null;
    this.heartbeatInterval = 30000; // 30秒
    // 重连次数
    this.reconnectAttempts = 0;
    this.maxReconnectAttempts = 5;
    this.reconnectInterval = 5000; // 5秒
    // 存储回调函数
    this.onMessageCallback = null; // 存储回调函数
  }

  // 重连
  reconnect() {
    if (this.reconnectAttempts < this.maxReconnectAttempts) {
      this.reconnectAttempts++;
      console.log(`尝试重新连接... (${this.reconnectAttempts}/${this.maxReconnectAttempts})`);
      setTimeout(() => {
        this.connect();
      }, this.reconnectInterval);
    } else {
      console.error('达到最大重连次数，连接失败');
    }
  }


  // 开启心跳
  startHeartbeat() {
    this.heartbeatTimer = setInterval(() => {
      this.send({ type: 'heartbeat' });
    }, this.heartbeatInterval);
  }
  // 关闭心跳
  stopHeartbeat() {
    if (this.heartbeatTimer) {
      clearInterval(this.heartbeatTimer);
      this.heartbeatTimer = null;
    }
  }
  // 连接
  async connect() {
    this.socket = new WebSocket(this.url);
    this.socket.onopen = await this.onOpen.bind(this);
    this.socket.onmessage = this.onMessage.bind(this);
    this.socket.onclose = this.onClose.bind(this);
    this.socket.onerror = this.onError.bind(this);
  }
  // 连接成功
  onOpen() {
    console.log('WebSocket连接已建立');
    this.reconnectAttempts = 0;
    this.startHeartbeat();
  }
  // 
  onMessage(event) {
    console.log('收到消息:', event.data);
    if (this.onMessageCallback) {
      this.onMessageCallback(event.data); // 调用回调函数
    }
  }
  // 接收到错误消息  
  onClose() {
    console.log('WebSocket连接已关闭');
    this.stopHeartbeat();
    this.reconnect();
  }
  // 接收到错误消息  
  onError(error) {
    console.error('WebSocket错误:', error);
  }
  // 发送消息
  send(data) {
    if (this.socket && this.socket.readyState === WebSocket.OPEN) {
      this.socket.send(JSON.stringify(data));
    } else {
      console.error('WebSocket未连接');
    }
  }
  // 关闭连接
  close() {
    if (this.socket) {
      this.socket.close();
    }
  }
}

// urls: [
//   'turn:124.71.68.142:3478?transport=udp', // 强制UDP
//   'turn:124.71.68.142:3478?transport=tcp'  // TCP备用
// ]

// const ws = new WebSocketService(`ws://192.168.0.59:3001/ws?user_id=${userId}`)