/**
 * WebSocket初始化工具
 * 统一管理WebSocket的初始化、连接、断开等操作
 */
import { webSocketManager } from './websocket.js';

/**
 * 检查是否已登录
 * @returns {boolean} 是否已登录
 */
function checkLoginStatus() {
  const token = uni.getStorageSync('token');
  const doctorId = uni.getStorageSync('doctor_id') || uni.getStorageSync('user_id');
  return !!(token && doctorId);
}

/**
 * 初始化WebSocket
 * 职责：检查登录状态，如果已登录则连接WebSocket并绑定用户
 * @returns {boolean} 是否初始化成功
 */
export function initWebSocket() {
  // 检查登录状态
  if (!checkLoginStatus()) {
    console.log('未登录，跳过WebSocket初始化');
    return false;
  }

  // 如果已经连接，不需要重复连接
  if (webSocketManager.isConnected) {
    console.log('WebSocket已连接，跳过初始化');
    return true;
  }

  try {
    console.log('开始初始化WebSocket...');
    webSocketManager.connect();
    return true;
  } catch (error) {
    console.error('WebSocket初始化失败:', error);
    return false;
  }
}

/**
 * 断开WebSocket连接
 * 职责：断开WebSocket连接，清理资源
 */
export function disconnectWebSocket() {
  try {
    console.log('断开WebSocket连接...');
    webSocketManager.disconnect();
  } catch (error) {
    console.error('断开WebSocket失败:', error);
  }
}

/**
 * 重新绑定用户
 * 职责：在token刷新或用户信息变更后，重新绑定用户
 * @returns {boolean} 是否绑定成功
 */
export function rebindUser() {
  if (!checkLoginStatus()) {
    console.warn('未登录，无法重新绑定用户');
    return false;
  }

  try {
    console.log('重新绑定WebSocket用户...');
    return webSocketManager.rebindUser();
  } catch (error) {
    console.error('重新绑定用户失败:', error);
    return false;
  }
}

/**
 * 获取WebSocket连接状态
 * @returns {boolean} 是否已连接
 */
export function isWebSocketConnected() {
  return webSocketManager.isConnected;
}

/**
 * 获取WebSocket认证状态
 * @returns {boolean} 是否已认证
 */
export function isWebSocketAuthenticated() {
  return webSocketManager.isAuthenticated;
}

/**
 * 添加消息处理器
 * @param {Function} handler - 消息处理函数
 */
export function addMessageHandler(handler) {
  webSocketManager.addMessageHandler(handler);
}

/**
 * 移除消息处理器
 * @param {Function} handler - 消息处理函数
 */
export function removeMessageHandler(handler) {
  webSocketManager.removeMessageHandler(handler);
}

/**
 * 发送WebSocket消息
 * @param {Object} message - 消息对象
 * @param {boolean} requireAuth - 是否需要认证
 * @returns {boolean} 是否发送成功
 */
export function sendWebSocketMessage(message, requireAuth = true) {
  return webSocketManager.send(message, requireAuth);
}
