"use client";

/**
 * IChatRepository 接口
 *
 * 对齐 Dart 端 `ChatRepository` 抽象（lib/data/repositories/chat_repository.dart）：
 *   - 远程：发送消息、获取历史
 *   - 本地：写入 / 批量覆盖 / 读取 / 清空 / 计数
 *
 * 私有助手（`_chatToLocal` / `_localToChat` / `_mapLocalStorageResult`）不暴露。
 * 原始 Dart: lib/data/repositories/chat_repository_impl.dart
 */

import type { Result } from "@/utils";
import type {
  ChatHistoryResponse,
  ChatMessage,
  ChatSendResponse,
  UnlockPrivateResponse,
} from "@/data/dto/chat";

export interface IChatRepository {
  /** 发送一条消息。 */
  sendMessage(
    message: string,
    options?: { image?: string; useWebSocket?: boolean },
  ): Promise<Result<ChatSendResponse>>;

  /** 获取聊天历史，分页参数默认 limit=50, offset=0。 */
  getHistory(limit?: number, offset?: number): Promise<Result<ChatHistoryResponse>>;

  /** 解锁私密消息。 */
  unlockPrivateMessage(messageId: string): Promise<Result<UnlockPrivateResponse>>;

  /** 把一条消息写入本地存储。 */
  saveMessageToLocal(message: ChatMessage): Promise<Result<void>>;

  /** 批量覆盖写入：先清空本地存储，再写入新列表。 */
  saveMessagesToLocal(messages: readonly ChatMessage[]): Promise<Result<void>>;

  /** 读取所有本地消息，按 dbId 升序。 */
  getLocalMessages(): Promise<Result<ChatMessage[]>>;

  /** 清空本地消息。 */
  clearLocalMessages(): Promise<Result<void>>;

  /** 获取本地消息数量。 */
  getLocalMessageCount(): Promise<Result<number>>;
}
