import 'dart:io';

import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/material.dart';
import 'package:flutter_stripe/flutter_stripe.dart';
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
import 'package:ride/constant/credential.dart';
import 'package:ride/constant/info.dart';
import 'package:ride/views/auth/captin/login_captin.dart';
import 'package:ride/views/auth/login_page.dart';
import 'package:ride/views/home/Captin/home_captin.dart';

import 'constant/box_name.dart';
import 'controller/firebase/firbase_messge.dart';
import 'controller/local/local_controller.dart';
import 'controller/local/translations.dart';
import 'firebase_options.dart';
import 'models/db_sql.dart';
import 'views/home/map_page.dart';

final box = GetStorage();
DbSql sql = DbSql.instance;
@pragma('vm:entry-point')
Future<void> backgroundMessageHandler(RemoteMessage message) async {
  await Firebase.initializeApp();
  print('===========back===${message.notification?.title}');

  if (message.notification!.title == 'Sefer') {}
}

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await GetStorage.init();
  Stripe.publishableKey = StripeKey.publishableKey;
  if (Platform.isAndroid || Platform.isIOS) {
    await Firebase.initializeApp(
      options: DefaultFirebaseOptions.currentPlatform,
    );
    await FirebaseMessagesController().requestFirebaseMessagingPermission();

    await FirebaseMessagesController().getToken();
    FirebaseMessaging.onBackgroundMessage(backgroundMessageHandler);

    List<Future> initializationTasks = [
      FirebaseMessagesController().getNotificationSettings(),
      FirebaseMessagesController().getToken(),
      // FirebaseMessagesController().getTokens(),
      // Add more initialization tasks here
    ];

    await Future.wait(initializationTasks);
  }

  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  // This widget is the root of your application.

  @override
  Widget build(BuildContext context) {
    LocaleController controller = Get.put(LocaleController());

    return GetMaterialApp(
        title: AppInformation.appName,
        translations: MyTranslation(),
        debugShowCheckedModeBanner: false,
        locale: controller.language,
        theme: controller.appTheme,
        key: UniqueKey(),
        // routes: {'/':const HomePage()},
        home: box.read(BoxName.email) != null
            ? const MapPage()
            : box.read(BoxName.emailDriver) == null
                ? LoginPage()
                : box.read(BoxName.emailDriver) != null
                    ? const HomeCaptain()
                    : LoginCaptin());
  }
}
