import 'package:flutter/material.dart';
import 'app/app.dart';
import 'features/reports/data/demo_report_store.dart';
import 'features/reports/data/report_photo_store.dart';
import 'features/jobs/data/job_store.dart';
import 'features/customers/data/customer_store.dart';
import 'features/profile/data/company_store.dart';
import 'features/employees/data/employee_store.dart';
import 'core/storage/local_storage.dart';
import 'core/sync/sync_queue_store.dart';
import 'core/ai/ai_settings_store.dart';
import 'core/auth/auth_store.dart';
import 'core/sync/master_data_sync.dart';
import 'core/sync/report_sync.dart';
import 'core/sync/report_asset_sync.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await LocalStorage.instance.initialize();
await SyncQueueStore.instance.initialize();
await AiSettingsStore.instance.initialize();
await AuthStore.instance.initialize();
await CustomerStore.instance.initialize();
await JobStore.instance.initialize();
await DemoReportStore.instance.initialize();
await ReportPhotoStore.instance.initialize();
ReportAssetSyncController.instance.registerPhotoBytesProvider(
(assetId) async => ReportPhotoStore.instance.photoById(assetId)?.bytes,
);
await CompanyStore.instance.initialize();
await EmployeeStore.instance.initialize();
MasterDataSyncController.instance.onDataChanged = () async {
await CustomerStore.instance.initialize();
await JobStore.instance.initialize();
await EmployeeStore.instance.initialize();
};
await MasterDataSyncController.instance.initialize();
if (MasterDataSyncController.instance.status == MasterDataSyncStatus.idle) {
await MasterDataSyncController.instance.synchronize();
}
await ReportSyncController.instance.initialize();
if (ReportSyncController.instance.status == ReportSyncStatus.idle) {
await ReportSyncController.instance.synchronize();
}
await ReportAssetSyncController.instance.initialize();
if (ReportAssetSyncController.instance.status == ReportAssetSyncStatus.idle) {
await ReportAssetSyncController.instance.synchronize();
}
runApp(const MachweisApp());
}
