import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:provider/provider.dart';
import 'package:smf_mobile/pages/home_page.dart';
import 'package:smf_mobile/pages/login_email_page.dart';
import 'package:smf_mobile/repositories/application_repository.dart';
import 'package:smf_mobile/repositories/form_repository.dart';
import 'package:smf_mobile/repositories/login_repository.dart';
import 'package:smf_mobile/repositories/user_repository.dart';
import 'package:smf_mobile/util/helper.dart';
import 'constants/app_constants.dart';
import 'constants/app_urls.dart';
import 'constants/color_constants.dart';
import 'routes.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:firebase_core/firebase_core.dart';

class LandingPage extends StatefulWidget {
  static const route = AppUrl.landingPage;

  const LandingPage({Key? key}) : super(key: key);

  @override
  _LandingPageState createState() => _LandingPageState();
  static _LandingPageState? of(BuildContext context) =>
      context.findAncestorStateOfType<_LandingPageState>();
}

class _LandingPageState extends State<LandingPage> {
  final client = HttpClient();
  Locale _locale = const Locale('en', 'US');
  bool _isTokenExpired = false;

  @override
  void initState() {
    super.initState();
  }

  void setLocale(Locale value) {
    setState(() {
      _locale = value;
    });
  }

  Future<dynamic> _initilizeApp() async {
    _isTokenExpired = await Helper.isTokenExpired();
    await Firebase.initializeApp();
    // await Future.delayed(const Duration(microseconds: 100));
    return true;
  }

  @override
  Widget build(BuildContext context) {
    return Container(
        color: AppColors.scaffoldBackground,
        child: FutureBuilder(
            // Initialize FlutterFire
            future: _initilizeApp(),
            builder: (context, AsyncSnapshot<dynamic> snapshot) {
              // Check for errors
              if (snapshot.hasData) {
                return MultiProvider(
                    providers: [
                      ChangeNotifierProvider.value(value: LoginRespository()),
                      ChangeNotifierProvider.value(
                          value: ApplicationRespository()),
                      ChangeNotifierProvider.value(value: UserRespository()),
                      ChangeNotifierProvider.value(value: FormRespository()),
                    ],
                    child: MaterialApp(
                      title: appName,
                      locale: _locale,
                      localizationsDelegates: const [
                        AppLocalizations.delegate,
                        GlobalMaterialLocalizations.delegate,
                        GlobalWidgetsLocalizations.delegate,
                        GlobalCupertinoLocalizations.delegate,
                      ],
                      supportedLocales: const [
                        Locale('en', 'US'),
                        // Locale('es', 'ES'),
                      ],
                      theme: ThemeData(
                          scaffoldBackgroundColor: AppColors.scaffoldBackground,
                          primaryColor: Colors.white,
                          visualDensity: VisualDensity.adaptivePlatformDensity,
                          dividerColor: AppColors.black08,
                          canvasColor: Colors.white,
                          unselectedWidgetColor: AppColors.black40),
                      debugShowCheckedModeBanner: false,
                      onGenerateRoute: Routes.generateRoute,
                      onUnknownRoute: Routes.errorRoute,
                      home: !_isTokenExpired
                          ? const HomePage()
                          : const LoginEmailPage(),
                      // home: const HomePage(),
                    ));
              } else {
                return const Center();
              }
            }));
  }
}