import 'package:aitrainer_app/bloc/session/session_bloc.dart';
import 'package:aitrainer_app/bloc/settings/settings_bloc.dart';
import 'package:aitrainer_app/localization/app_language.dart';
import 'package:aitrainer_app/model/cache.dart';
import 'package:aitrainer_app/view/login.dart';
import 'package:aitrainer_app/view/menu_page.dart';
import 'package:aitrainer_app/view/registration.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'loading.dart';


class AitrainerHome extends StatefulWidget {
  _HomePageState _state;
  @override
  State<StatefulWidget> createState() {
    _state = new _HomePageState();
    return _state;
  }
}

class _HomePageState extends State<AitrainerHome> {
  GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();

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

    /// We require the initializers to run after the loading screen is rendered
    SchedulerBinding.instance.addPostFrameCallback((_) {
      runDelayedEvent();
    });
  }

  Future runDelayedEvent() async {
    await Future.delayed(Duration(seconds: 2), () async {
      if ( context != null) {
        // ignore: close_sinks
        SessionBloc sessionBloc = BlocProvider.of<SessionBloc>(context);
        if (sessionBloc.state != SessionReady()) {
          // ignore: close_sinks
          SettingsBloc settingsBloc = BlocProvider.of<SettingsBloc>(context);
          settingsBloc.context = context;
          sessionBloc.add(SessionStart(settingsBloc: settingsBloc));
          //String lang = AppLanguage().appLocal.languageCode;
          //print (" -- Loading delayed lang $lang");
          //settingsBloc.add(SettingsChangeLanguage(language: lang));
        }
      }
    });
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      key: _scaffoldKey,
      body: Container(
        child: BlocConsumer<SessionBloc, SessionState>(
          listener: (context, state) {
            if ( state is SessionFailure) {
              Scaffold.of(context).showSnackBar(SnackBar(
                content: Text(
                  state.message,
                ),
                backgroundColor: Colors.orange,
              ));
            }
          },
          builder: (context, state) {
            if (state is SessionInitial) {
              return LoadingScreenMain();
            } else if (state is SessionLoading) {
              print("loading");
              return LoadingScreenMain();
            } else if (state is SessionReady) {
              print("ready menu with " + Cache().startPage);
              if (Cache().startPage == 'login') {
                return LoginPage();
              } else if (Cache().startPage == 'registration') {
                return RegistrationPage();
              } else {
                return MenuPage(parent: 0);
              }
            } else {
              print("else");
              return MenuPage(parent: 0);
            }
          }
        ),
      ),
      //bottomNavigationBar: BottomNavigator(bottomNavIndex: 0),
    );
  }
}