import 'package:common/.generated/l10n/app_localizations.dart';
import 'package:common/services/msal_service.dart';
import 'package:common/utils/env_utils.dart';
import 'package:comwell_key_app/utils/firebase.dart';
import 'package:comwell_key_app/utils/locator.dart';
import 'package:comwell_key_app/services/http_client.dart';
import 'package:comwell_key_app/utils/secure_storage.dart';
import 'package:concierge/flavors.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:sentry_flutter/sentry_flutter.dart';
import 'comwell_app.dart';
import 'package:payment_plugin/payment_plugin.dart';

void main() async {
  print("step 0");
  F.appFlavor = Flavor.values.firstWhere((f) => f.name == appFlavor?.toLowerCase());
  await AppLocalizations.delegate.load(const Locale("en"));
  print("step 1");
  WidgetsFlutterBinding.ensureInitialized();
  print("Current flavor: $appFlavor");

  try {
    switch (appFlavor?.toLowerCase()) {
      case "develop":
        await dotenv.load(fileName: 'env/.dev.env');
        print("step 2");
      case "stage":
        await dotenv.load(fileName: 'env/.stage.env');
        print("step 3");
      case "prod":
        await dotenv.load(fileName: 'env/.prod.env');
        print("step 4");
    }
    print("Successfully loaded environment file");
    await configureFirebase();
    print("step 5");
    await SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
    print("step 6");
    setupLocator();

    await SentryFlutter.init((options) {
      options.dsn = dotenv.SENTRY_DSN;
      options.tracesSampleRate = 1.0;
      options.profilesSampleRate = 1.0;
      options.environment = appFlavor;
    });
      print("step 7");

    await locator<ComwellPreferences>().init();
    print("step 8");
    await locator<MSALService>().init();
    print("step 9");

    await PaymentPlugin.initialize(config: PaymentConfig(dio: locator.get<ComwellHttpClient>().dio,),);
    print("step 10");

    // Setting System UI overlay
    SystemChrome.setSystemUIOverlayStyle(
      const SystemUiOverlayStyle(
        statusBarColor: Colors.transparent,
        statusBarBrightness: Brightness.dark,
        systemStatusBarContrastEnforced: false,
        systemNavigationBarColor: Colors.transparent,
        systemNavigationBarDividerColor: Colors.transparent,
        systemNavigationBarContrastEnforced: false,
        systemNavigationBarIconBrightness: Brightness.dark,
        statusBarIconBrightness: Brightness.dark,
      ),
    );
  } catch (e, st) {
    print("Error init app: $e");
    if (!kDebugMode) Sentry.captureException(e, stackTrace: st);
    rethrow;
  }

  // Render UI immediately; do heavy initialization after first frame to avoid ANR.
  runApp(SentryWidget(child: const ComwellApp()));
}