import 'package:aves/model/availability.dart';
import 'package:aves/model/db/db.dart';
import 'package:aves/model/db/db_sqflite.dart';
import 'package:aves/model/settings/store_shared_pref.dart';
import 'package:aves/services/app_profile_service.dart';
import 'package:aves/services/app_service.dart';
import 'package:aves/services/device_service.dart';
import 'package:aves/services/media/embedded_data_service.dart';
import 'package:aves/services/media/media_edit_service.dart';
import 'package:aves/services/media/media_fetch_service.dart';
import 'package:aves/services/media/media_session_service.dart';
import 'package:aves/services/media/media_store_service.dart';
import 'package:aves/services/metadata/metadata_edit_service.dart';
import 'package:aves/services/metadata/metadata_fetch_service.dart';
import 'package:aves/services/security_service.dart';
import 'package:aves/services/storage_service.dart';
import 'package:aves/services/window_service.dart';
import 'package:aves_model/aves_model.dart';
import 'package:aves_report/aves_report.dart';
import 'package:aves_report_platform/aves_report_platform.dart';
import 'package:aves_services/aves_services.dart';
import 'package:aves_services_platform/aves_services_platform.dart';
import 'package:aves_video/aves_video.dart';
import 'package:aves_video_mpv/aves_video_mpv.dart';
import 'package:get_it/get_it.dart';
import 'package:path/path.dart' as p;
final getIt = GetIt.instance;
// fixed implementation is easier for test driver setup
final SettingsStore settingsStore = SharedPrefSettingsStore();
final p.Context pContext = getIt
();
final AvesAvailability availability = getIt();
final LocalMediaDb localMediaDb = getIt();
final AvesVideoControllerFactory videoControllerFactory = getIt();
final AvesVideoMetadataFetcher videoMetadataFetcher = getIt();
final AppService appService = getIt();
final AppProfileService appProfileService = getIt();
final DeviceService deviceService = getIt();
final EmbeddedDataService embeddedDataService = getIt();
final MediaEditService mediaEditService = getIt();
final MediaFetchService mediaFetchService = getIt();
final MediaSessionService mediaSessionService = getIt();
final MediaStoreService mediaStoreService = getIt();
final MetadataEditService metadataEditService = getIt();
final MetadataFetchService metadataFetchService = getIt();
final MobileServices mobileServices = getIt();
final ReportService reportService = getIt();
final SecurityService securityService = getIt();
final StorageService storageService = getIt();
final WindowService windowService = getIt();
void initPlatformServices() {
getIt.registerLazySingleton(p.Context.new);
getIt.registerLazySingleton(LiveAvesAvailability.new);
getIt.registerLazySingleton(SqfliteLocalMediaDb.new);
getIt.registerLazySingleton(MpvVideoControllerFactory.new);
getIt.registerLazySingleton(MpvVideoMetadataFetcher.new);
getIt.registerLazySingleton(PlatformAppService.new);
getIt.registerLazySingleton(PlatformAppProfileService.new);
getIt.registerLazySingleton(PlatformDeviceService.new);
getIt.registerLazySingleton(PlatformEmbeddedDataService.new);
getIt.registerLazySingleton(PlatformMediaEditService.new);
getIt.registerLazySingleton(PlatformMediaFetchService.new);
getIt.registerLazySingleton(PlatformMediaSessionService.new);
getIt.registerLazySingleton(PlatformMediaStoreService.new);
getIt.registerLazySingleton(PlatformMetadataEditService.new);
getIt.registerLazySingleton(PlatformMetadataFetchService.new);
getIt.registerLazySingleton(PlatformMobileServices.new);
getIt.registerLazySingleton(PlatformReportService.new);
getIt.registerLazySingleton(PlatformSecurityService.new);
getIt.registerLazySingleton(PlatformStorageService.new);
getIt.registerLazySingleton(PlatformWindowService.new);
}