import 'package:doctor_app_flutter/core/provider/robot_provider.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/util/translations_delegate_base.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:hexcolor/hexcolor.dart';
import 'package:provider/provider.dart';

import './config/size_config.dart';
import './routes.dart';
import 'config/config.dart';
import 'core/service/NavigationService.dart';
import 'core/viewModel/authentication_view_model.dart';
import 'locator.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  setupLocator();
  runApp(MyApp());
}

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) => MaterialApp(
                      showSemanticsDebugger: false,
                      title: 'Doctors App',
                      locale: projectProvider.appLocal,
                      localizationsDelegates: [
                        TranslationBaseDelegate(),
                        GlobalMaterialLocalizations.delegate,
                        GlobalWidgetsLocalizations.delegate,
                      ],
                      supportedLocales: [
                        const Locale('ar', ''), // Arabic
                        const Locale('en', ''), // English
                      ],
                      theme: ThemeData(
                        primarySwatch: Colors.grey,
                        primaryColor: Colors.grey,
                        buttonColor: HexColor('#B8382C'),
                        fontFamily: 'Poppins',
                        dividerColor: Colors.grey[350],
                        backgroundColor: Color.fromRGBO(255, 255, 255, 1),
                      ),
                  navigatorKey: locator<NavigationService>().navigatorKey,
                      initialRoute: INIT_ROUTE,
                      routes: routes,
                      debugShowCheckedModeBanner: false,
                    )),
          );
        });
      },
    );
  }
}
