/**
 * API 模块
 * 封装所有 Tauri 命令调用
 */

import { invoke } from '@tauri-apps/api/core'

/** 发现服务 API */
export const discoveryApi = {
  /** 启动设备发现服务 */
  start: () => invoke('start_discovery_service'),

  /** 停止设备发现服务 */
  stop: () => invoke('stop_discovery_service'),

  /** 获取已发现的设备列表（在线设备） */
  getDevices: () => invoke('get_discovered_devices'),

  /** 获取历史设备列表（包含离线设备） */
  getKnownDevices: () => invoke('get_known_devices'),
}

/** WebSocket API */
export const websocketApi = {
  /** 启动 WebSocket 服务端 */
  startServer: () => invoke('start_websocket_server'),

  /** 停止 WebSocket 服务端 */
  stopServer: () => invoke('stop_websocket_server'),

  /** 连接到指定设备 */
  connect: (deviceId) => invoke('connect_to_peer', { deviceId }),

  /** 断开与指定设备的连接 */
  disconnect: (deviceId) => invoke('disconnect_from_peer', { deviceId }),
}

/** 聊天 API */
export const chatApi = {
  /** 发送聊天消息 */
  sendMessage: (deviceId, content, messageType) =>
    invoke('send_chat_message', { deviceId, content, messageType }),

  /** 获取聊天历史 */
  getHistory: (deviceId, limit, offset) =>
    invoke('get_chat_history', { deviceId, limit, offset }),

  /** 删除聊天历史 */
  deleteHistory: (deviceId) =>
    invoke('delete_chat_history', { deviceId }),

  /** 获取会话列表（所有有聊天记录的设备） */
  getConversations: () =>
    invoke('get_conversations'),
}

/** 文件传输 API */
export const fileApi = {
  /** 启动 HTTP 服务端 */
  startServer: () => invoke('start_http_server'),

  /** 停止 HTTP 服务端 */
  stopServer: () => invoke('stop_http_server'),

  /** 选择要发送的文件 */
  selectFile: () => invoke('select_file_to_send'),

  /** 发送文件 */
  sendFile: (deviceId, fileId, filePath) =>
    invoke('send_file', { deviceId, fileId, filePath }),

  /** 获取传输历史 */
  getHistory: (deviceId, limit) =>
    invoke('get_transfer_history', { deviceId, limit }),

  /** 打开文件位置 */
  openLocation: (path) => invoke('open_file_location', { path }),

  /** 取消传输 */
  cancelTransfer: (fileId) => invoke('cancel_transfer', { fileId }),
}

/** 配置 API */
export const configApi = {
  /** 获取应用配置 */
  get: () => invoke('get_app_config'),

  /** 更新设备名称 */
  updateDeviceName: (name) => invoke('update_device_name', { name }),

  /** 更新下载目录 */
  updateDownloadDir: (dir) => invoke('update_download_dir', { dir }),

  /** 获取本机设备信息 */
  getLocalDevice: () => invoke('get_local_device_info'),
}
