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

/// 小程序仓储接口（discover / explore / favorite / recent 共用）
///
/// ## 职责
/// - StorageSdkApi ↔ Domain MiniApp 映射
/// - CRUD 操作（通过 StorageSdkApi，不直接接触 DB）
/// - 所有公开接口只接受 Domain 实体，Companion 转换完全内聚在 Impl
abstract class MiniAppRepository {
  // ── 监听 ─────────────────────────────────────────────────────────────────

  /// 监听所有小程序，DB 变化自动反映
  Stream<List<MiniApp>> watchAll();

  /// 监听指定小程序
  Stream<MiniApp?> watch(String id);

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

  /// 读取所有小程序
  Future<List<MiniApp>> getAll();

  /// 读取指定小程序，不存在返回 null
  Future<MiniApp?> get(String id);

  /// 检查是否存在
  Future<bool> isExist(String id);

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

  /// 插入或替换小程序
  Future<void> insertOrReplace(MiniApp miniApp);

  /// 批量插入或替换小程序
  Future<void> insertOrReplaceAll(List<MiniApp> miniApps);

  /// 更新小程序
  Future<void> update(MiniApp miniApp);

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

  /// 删除指定小程序
  Future<void> delete(String id);

  /// 清空所有小程序
  Future<void> clear();
}
