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

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

  /// 监听所有收藏详情，DB 变化自动反映
  Stream<List<FavoriteDetail>> watchAll();

  /// 监听指定 relatedId 的收藏详情
  Stream<List<FavoriteDetail>> watchByRelatedId(String relatedId);

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

  /// 读取所有收藏详情
  Future<List<FavoriteDetail>> getAll();

  /// 读取指定 id，不存在返回 null
  Future<FavoriteDetail?> getById(int id);

  /// 读取指定 relatedId 的所有收藏详情
  Future<List<FavoriteDetail>> getByRelatedId(String relatedId);

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

  /// 插入收藏详情（autoIncrement id，无需提供）
  Future<void> insert(FavoriteDetail favoriteDetail);

  /// 批量插入收藏详情
  Future<void> insertAll(List<FavoriteDetail> favoriteDetails);

  /// 插入或替换收藏详情
  Future<void> insertOrReplace(FavoriteDetail favoriteDetail);

  /// 更新收藏详情
  Future<void> update(FavoriteDetail favoriteDetail);

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

  /// 删除指定 id
  Future<void> delete(int id);

  /// 删除指定 relatedId 的所有收藏详情
  Future<void> deleteByRelatedId(String relatedId);

  /// 清空所有收藏详情
  Future<void> clear();
}
