import 'package:collection/collection.dart';
import 'package:trans_lark/entity/history_model.dart';
import 'package:trans_lark/storage/hive_storage.dart';
import 'package:trans_lark/util/date_util.dart';

class HistoryData {
  /// 私有构造函数
  HistoryData._();

  /// 静态常量用于保存类的唯一实例
  static final HistoryData _instance = HistoryData._();

  /// 工厂构造函数返回类的唯一实例
  factory HistoryData() {
    return _instance;
  }

  /// 声明盒子
  /// 注意, main函数中这个盒子已经打开, 可以进行存储操作
  final _box = getHistoryBox();

  /// 返回所有数据
  List<HistoryEntity> getList() {
    return _box.values.toList();
  }

  /// 返回分组后的所有数据
  Map<String, List<HistoryEntity>> getGroupByList() {
    // 使用 groupBy 函数进行分组
    var groupedEvents = groupBy(
        getList().reversed.toList(),
        (HistoryEntity event) => DateUtil.formatDateMs(
            event.translationTime ?? DateUtil.getNowTimestamp(),
            format: DateFormats.yMoD));
    return groupedEvents;
  }

  /// 添加数据
  Future<int> addData(HistoryEntity entity) async {
    entity.translationTime = DateUtil.getNowTimestamp();
    return await _box.add(entity);
  }

  /// 删除
  Future<void> delete(int index) async {
    await _box.deleteAt(index);
    await _box.flush();
  }

  /// 清空所有数据
  Future<void> clear() async {
    await _box.clear();
    await _box.flush();
  }
}
