/*
 *   Famedly Matrix SDK
 *   Copyright (C) 2019, 2020 Famedly GmbH
 *
 *   This program is free software: you can redistribute it and/or modify
 *   it under the terms of the GNU Affero General Public License as
 *   published by the Free Software Foundation, either version 3 of the
 *   License, or (at your option) any later version.
 *
 *   This program is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 *   GNU Affero General Public License for more details.
 *
 *   You should have received a copy of the GNU Affero General Public License
 *   along with this program.  If not, see .
 */
import 'package:file/local.dart';
import 'package:hive/hive.dart';
import 'package:sqflite_common_ffi/sqflite_ffi.dart';
import 'package:matrix/matrix.dart';
Future getDatabase(Client? c, {String? databasePath}) =>
    getMatrixSdkDatabase(c, path: databasePath);
bool hiveInitialized = false;
// ignore: deprecated_member_use_from_same_package
Future getHiveCollectionsDatabase(Client? c) async {
  final testHivePath = await LocalFileSystem()
      .systemTempDirectory
      .createTemp('dart-sdk-tests-database');
  if (!hiveInitialized) {
    Hive.init(testHivePath.path);
  }
  // ignore: deprecated_member_use_from_same_package
  final db = HiveCollectionsDatabase(
    'unit_test.${c?.hashCode}',
    testHivePath.path,
  );
  await db.open();
  return db;
}
// ignore: deprecated_member_use_from_same_package
Future getMatrixSdkDatabase(
  Client? c, {
  String? path,
}) async {
  final database = await databaseFactoryFfi.openDatabase(
    path ?? ':memory:',
    options: OpenDatabaseOptions(singleInstance: false),
  );
  final db = MatrixSdkDatabase(
    'unit_test.${c?.hashCode}',
    database: database,
    sqfliteFactory: databaseFactoryFfi,
  );
  await db.open();
  return db;
}