/// UnionFlow - Application Mobile Révolutionnaire
///
/// Point d'entrée principal avec système d'authentification adaptatif
/// Architecture ultra-sophistiquée avec dashboard morphique basé sur les rôles
library main;

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:sentry_flutter/sentry_flutter.dart';
import 'app/app.dart';
import 'core/config/environment.dart';
import 'core/l10n/locale_provider.dart';
import 'core/theme/theme_provider.dart';
import 'core/di/injection.dart';
import 'core/security/app_integrity_service.dart';
import 'core/utils/logger.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  AppConfig.initialize();
  GoogleFonts.config.allowRuntimeFetching = !AppConfig.isProd;

  // Initialisation unique et automatique (DRY)
  await configureDependencies();

  // Surveillance intégrité applicative MASVS v2 RESILIENCE
  await AppIntegrityService.instance.initialize(
    onThreatDetected: (threat) =>
        AppLogger.warning('Threat detected: $threat', tag: 'Security'),
  );

  // Mode immersif et config système
  await _configureApp();

  final localeProvider = LocaleProvider();
  await localeProvider.initialize();

  final themeProvider = await ThemeProvider.load();

  if (AppConfig.enableCrashReporting && AppConfig.sentryDsn.isNotEmpty) {
    await SentryFlutter.init(
      (options) {
        options.dsn = AppConfig.sentryDsn;
        options.environment = AppConfig.environment.name;
        options.tracesSampleRate = AppConfig.isProd ? 0.2 : 1.0;
        options.debug = AppConfig.enableDebugMode;
        options.sendDefaultPii = false;
      },
      appRunner: () => runApp(
        DefaultAssetBundle(
          bundle: SentryAssetBundle(),
          child: UnionFlowApp(localeProvider: localeProvider, themeProvider: themeProvider),
        ),
      ),
    );
  } else {
    runApp(UnionFlowApp(localeProvider: localeProvider, themeProvider: themeProvider));
  }
}

/// Configure les paramètres globaux de l'application
Future<void> _configureApp() async {
  // Configuration de l'orientation
  await SystemChrome.setPreferredOrientations([
    DeviceOrientation.portraitUp,
  ]);

  // Configuration de la barre de statut - Mode immersif edge-to-edge
  // Les icônes s'adaptent automatiquement via AppBarTheme.systemOverlayStyle dans chaque thème
  SystemChrome.setSystemUIOverlayStyle(
    const SystemUiOverlayStyle(
      statusBarColor: Colors.transparent,
      systemNavigationBarColor: Colors.transparent, // Transparent pour edge-to-edge
      systemNavigationBarDividerColor: Colors.transparent,
    ),
  );

  // Activer le mode edge-to-edge (immersif)
  SystemChrome.setEnabledSystemUIMode(
    SystemUiMode.edgeToEdge,
  );
}