/**
 * 消息 Repository 接口
 * 定义消息数据访问的抽象
 */

import type { Message, Conversation } from '../../../core/entities/Message';

export interface IMessageRepository {
  // ==================== 消息操作 ====================
  
  /**
   * 获取会话的消息列表
   */
  getMessages(
    conversationId: string,
    options?: {
      beforeSeq?: number;
      afterSeq?: number;
      limit?: number;
    }
  ): Promise<Message[]>;
  
  /**
   * 保存消息
   */
  saveMessage(message: Message): Promise<void>;
  
  /**
   * 批量保存消息
   */
  saveMessages(messages: Message[]): Promise<void>;
  
  /**
   * 更新消息状态
   */
  updateMessageStatus(
    messageId: string,
    status: 'normal' | 'recalled' | 'deleted'
  ): Promise<void>;
  
  /**
   * 标记消息为已读
   */
  markAsRead(messageIds: string[]): Promise<void>;
  
  /**
   * 获取未读消息数
   */
  getUnreadCount(conversationId: string): Promise<number>;
  
  // ==================== 会话操作 ====================
  
  /**
   * 获取会话列表
   */
  getConversations(): Promise<Conversation[]>;
  
  /**
   * 获取单个会话
   */
  getConversation(conversationId: string): Promise<Conversation | null>;
  
  /**
   * 保存会话
   */
  saveConversation(conversation: Conversation): Promise<void>;
  
  /**
   * 更新会话未读数
   */
  updateUnreadCount(conversationId: string, count: number): Promise<void>;
  
  /**
   * 更新会话最后消息
   */
  updateLastMessage(
    conversationId: string,
    messageId: string,
    seq: number
  ): Promise<void>;
  
  // ==================== 同步操作 ====================
  
  /**
   * 从服务器同步消息
   */
  syncMessages(conversationId: string, lastSeq: number): Promise<Message[]>;
  
  /**
   * 获取服务器最新消息序列号
   */
  getServerLastSeq(conversationId: string): Promise<number>;
}
