import 'dart:io';

import 'package:easy_localization/easy_localization.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'package:hmg_flutter_template/classes/size_config.dart';
import 'package:hmg_flutter_template/config/app_state.dart';
import 'package:hmg_flutter_template/config/dependencies.dart';
import 'package:hmg_flutter_template/config/routes.dart';
import 'package:hmg_flutter_template/provider/dashboard_provider_model.dart';
import 'package:hmg_flutter_template/provider/login_provider_model.dart';
import 'package:hmg_flutter_template/theme/app_theme.dart';
import 'package:injector/injector.dart';
import 'package:logger/logger.dart';
import 'package:provider/provider.dart';
import 'package:provider/single_child_widget.dart';
import 'package:sizer/sizer.dart';

import 'generated/codegen_loader.g.dart';


late AppState appState;

final navigatorKey = GlobalKey<NavigatorState>();

Logger logger = Logger(
  printer: PrettyPrinter(
    lineLength: 0,
  ),
);

class MyHttpOverrides extends HttpOverrides {
  @override
  HttpClient createHttpClient(SecurityContext? context) {
    return super.createHttpClient(context)..badCertificateCallback = (X509Certificate cert, String host, int port) => true;
  }
}

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await EasyLocalization.ensureInitialized();
  // AppState().setPostParamsInitConfig();
  HttpOverrides.global = MyHttpOverrides();
  await Firebase.initializeApp();
  runApp(
    EasyLocalization(
      supportedLocales: const <Locale>[
        Locale('en', 'US'),
        Locale('ar', 'SA'),
      ],
      path: 'assets/langs',
      assetLoader: const CodegenLoader(),
      child: MultiProvider(
        providers: <SingleChildWidget>[
          ChangeNotifierProvider<DashboardProviderModel>(
            create: (_) => DashboardProviderModel(),
          ),
          ChangeNotifierProvider<LoginProviderModel>(
            create: (_) => LoginProviderModel(),
          ),
          ChangeNotifierProvider<DashboardProviderModel>(
            create: (_) => DashboardProviderModel(),
          ),
        ],
        child: MyApp(),
      ),
    ),
  );
}

// todo terminal command to generate translation files
// flutter pub run easy_localization:generate --source-dir ./assets/langs
// todo terminal command to generate translation keys
// flutter pub run easy_localization:generate --source-dir ./assets/langs -f keys -o locale_keys.g.dart
// command to generate languages data from json

class MyApp extends StatelessWidget {
  MyApp({super.key}) {
    AppDependencies.addDependencies();
    appState = Injector.appInstance.get<AppState>();
    appState.setPostParamsInitConfig();
  }

  @override
  Widget build(BuildContext context) {
    return LayoutBuilder(builder: (context, constraints) {
      return Sizer(
        builder: (
          BuildContext context,
          Orientation orientation,
          DeviceType deviceType,
        ) {
          SizeConfig().init(constraints, orientation);
          List<LocalizationsDelegate<dynamic>> delegates = context.localizationDelegates;
          return MaterialApp(
            // key: navigatorKey,
            navigatorKey: navigatorKey,
            theme: AppTheme.getTheme(
              EasyLocalization.of(context)?.locale.languageCode == "ar",
            ),
            debugShowCheckedModeBanner: false,
            localizationsDelegates: delegates,
            supportedLocales: context.supportedLocales,
            locale: context.locale,
            initialRoute: AppRoutes.initialPage,
            routes: AppRoutes.routes,
          );
        },
      );
    });
  }
}


