import 'dart:io';

import 'package:doctor_app_flutter/client/http_Overrides.dart';
import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/provider/robot_provider.dart';
import 'package:doctor_app_flutter/core/service/AnalyticsService.dart';
import 'package:doctor_app_flutter/core/service/NavigationService.dart';
import 'package:doctor_app_flutter/core/viewModel/authentication_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/livecare_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart';
import 'package:doctor_app_flutter/locator.dart';
import 'package:doctor_app_flutter/routes.dart';
import 'package:doctor_app_flutter/unsafe_device.dart';
import 'package:doctor_app_flutter/utils/translations_delegate_base_utils.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:timezone/data/latest_all.dart' as tz;

import 'core/service/security_service.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  HttpOverrides.global = MyHttpOverrides();
  setupLocator();
  await clearPrefsOnFirstLaunch();
  tz.initializeTimeZones();

  if (!kReleaseMode) {
    await locator.get<SecurityService>().initialize();

    // Set up critical threat callback to navigate to unsafe device page
    locator.get<SecurityService>().setOnCriticalThreatCallback(() {
      final navigationService = locator.get<NavigationService>();
      final context = navigationService.navigatorKey.currentContext;
      if (context != null) {
        // Clear entire navigation stack and show unsafe device page
        Navigator.of(context).pushAndRemoveUntil(
          MaterialPageRoute(builder: (_) => const UnsafeDevice()),
          (route) => false, // Remove all previous routes
        );
        debugPrint('🚨 Navigated to UnsafeDevice page - Critical threat detected');
      }
    });
  }
  runApp(MyApp());
}

//clearing all the shared pref on the inital start to avoid any profile issue
Future<void> clearPrefsOnFirstLaunch() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  bool isFirstLaunch = prefs.getBool('isFirstLaunch') ?? true;
  await prefs.clear(); // Clear all prefs
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    AppGlobal.CONTEX = context;

    return LayoutBuilder(
      builder: (context, constraints) {
        return OrientationBuilder(
          builder: (context, orientation) {
            SizeConfig().init(constraints, orientation);
            return MultiProvider(
              providers: [
                ChangeNotifierProvider<AuthenticationViewModel>(create: (context) => AuthenticationViewModel()),
                ChangeNotifierProvider<ProjectViewModel>(create: (context) => ProjectViewModel()),
                ChangeNotifierProvider<LiveCareViewModel>(create: (context) => LiveCareViewModel()),
                StreamProvider.value(value: RobotProvider().intStream(), initialData: RobotProvider().setValue({})),
              ],
              child: Consumer<ProjectViewModel>(
                builder: (context, projectProvider, child) => SafeArea(
                  top: false,
                  bottom: Platform.isAndroid ? true : false,
                  child: MaterialApp(
                    showSemanticsDebugger: false,
                    title: 'Doctors App',
                    locale: projectProvider.appLocal,
                    localizationsDelegates: [
                      TranslationBaseDelegate(),
                      GlobalMaterialLocalizations.delegate,
                      GlobalWidgetsLocalizations.delegate,
                      GlobalCupertinoLocalizations.delegate,
                      DefaultCupertinoLocalizations.delegate,
                    ],
                    supportedLocales: [
                      const Locale('ar', ''), // Arabic
                      const Locale('en', ''), // English
                    ],
                    theme: ThemeData(
                      primarySwatch: Colors.grey,
                      primaryColor: Colors.grey,
                      //buttonColor: HexColor('#D02127'),
                      fontFamily: 'Poppins',
                      dividerColor: Colors.grey[350],

                      // backgroundColor: Color.fromRGBO(255, 255, 255, 1),
                      useMaterial3: false,
                    ),
                    navigatorKey: locator<NavigationService>().navigatorKey,
                    navigatorObservers: [locator<AnalyticsService>().getAnalyticsObserver()],
                    initialRoute: INIT_ROUTE,
                    routes: routes,
                    debugShowCheckedModeBanner: false,
                  ),
                ),
              ),
            );
          },
        );
      },
    );
  }
}
