import 'package:im_app/domain/entities/chat_bot.dart';

/// 聊天机器人仓储接口
///
/// ## 职责
/// - StorageSdkApi ↔ Domain ChatBot 映射
/// - CRUD 操作（通过 StorageSdkApi，不直接接触 DB）
/// - 所有公开接口只接受 Domain 实体，Companion 转换完全内聚在 Impl
///
/// ## 数据流
/// ```
/// 写入：Domain ChatBot → _toCompanion() → StorageSdkApi → DB
/// 读取：DB row (DriftChatBot) → _toEntity() → Domain ChatBot
/// 监听：DB 变化 → stream → Domain ChatBot → UI
/// ```
abstract class ChatBotRepository {
  // ── 监听 ─────────────────────────────────────────────────────────────────

  /// 监听所有聊天机器人，DB 变化自动反映
  Stream<List<ChatBot>> watchAllChatBots();

  /// 监听指定聊天机器人
  Stream<ChatBot?> watchChatBot(int id);

  // ── 读取 ─────────────────────────────────────────────────────────────────

  /// 读取所有聊天机器人
  ///
  /// [limit] 可选限制数量
  Future<List<ChatBot>> getChatBots({int? limit});

  /// 读取指定聊天机器人，不存在返回 null
  Future<ChatBot?> getChatBot(int id);

  // ── 写入 ─────────────────────────────────────────────────────────────────

  /// 插入或替换聊天机器人
  Future<void> insertOrReplaceChatBot(ChatBot chatBot);

  /// 批量插入或替换聊天机器人
  Future<void> insertOrReplaceChatBots(List<ChatBot> chatBots);

  /// 更新聊天机器人
  Future<void> updateChatBot(ChatBot chatBot);

  // ── 删除 ─────────────────────────────────────────────────────────────────

  /// 删除指定聊天机器人
  Future<void> deleteChatBot(int id);

  /// 清空所有聊天机器人
  Future<void> clearChatBots();
}
