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

/// 标签仓储接口
abstract class TagRepository {
  // ── 监听 ─────────────────────────────────────────────────────────────────

  Stream<List<Tag>> watchAll();

  Stream<Tag?> watchById(int id);

  Stream<List<Tag>> watchByUid(int uid);

  Stream<List<Tag>> watchByType(int type);

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

  Future<List<Tag>> getAll();

  Future<Tag?> getById(int id);

  Future<List<Tag>> getByUid(int uid);

  Future<List<Tag>> getByType(int type);

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

  /// 插入标签（autoIncrement id，无需提供）
  Future<void> insert(Tag tag);

  Future<void> insertOrReplace(Tag tag);

  Future<void> insertOrReplaceAll(List<Tag> tags);

  Future<void> update(Tag tag);

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

  Future<void> delete(int id);

  Future<void> deleteByUid(int uid);

  Future<void> clear();
}
