import 'dart:io';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';

import 'package:spotifyplaylistgenerator/cubit/activity_cubit.dart';
import 'package:spotifyplaylistgenerator/cubit/nav_cubit_pages.dart';
import 'package:spotifyplaylistgenerator/cubit/nav_cubit_screens.dart';
import 'package:spotifyplaylistgenerator/cubit/settings_global_cubit.dart';
import 'package:spotifyplaylistgenerator/ui/skeleton.dart';

void main() async {
  // Initialize packages
  WidgetsFlutterBinding.ensureInitialized();
  await EasyLocalization.ensureInitialized();
  final Directory tmpDir = await getTemporaryDirectory();
  Hive.init(tmpDir.toString());
  HydratedBloc.storage = await HydratedStorage.build(
    storageDirectory: tmpDir,
  );

  SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp])
      .then((value) => runApp(EasyLocalization(
            path: 'assets/translations',
            supportedLocales: const <Locale>[
              Locale('en'),
              Locale('fr'),
            ],
            fallbackLocale: const Locale('en'),
            useFallbackTranslations: true,
            child: const MyApp(),
          )));
}

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

  @override
  Widget build(BuildContext context) {
    return MultiBlocProvider(
      providers: [
        BlocProvider<NavCubitPage>(create: (context) => NavCubitPage()),
        BlocProvider<NavCubitScreen>(create: (context) => NavCubitScreen()),
        BlocProvider<ApplicationThemeModeCubit>(
            create: (context) => ApplicationThemeModeCubit()),
        BlocProvider<ActivityCubit>(create: (context) => ActivityCubit()),
        BlocProvider<GlobalSettingsCubit>(create: (context) => GlobalSettingsCubit()),
      ],
      child: BlocBuilder<ApplicationThemeModeCubit, ApplicationThemeModeState>(
        builder: (BuildContext context, ApplicationThemeModeState state) {
          return MaterialApp(
            title: 'Spotify playlist generator',
            home: const SkeletonScreen(),

            // Theme stuff
            theme: lightTheme,
            darkTheme: darkTheme,
            themeMode: state.themeMode,

            // Localization stuff
            localizationsDelegates: context.localizationDelegates,
            supportedLocales: context.supportedLocales,
            locale: context.locale,
            debugShowCheckedModeBanner: false,
          );
        },
      ),
    );
  }
}