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/auth.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>();
  final AppLanguage appLanguage = AppLanguage();

  @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: 3), () async {
      if ( context != null) {
        // ignore: close_sinks
        SessionBloc sessionBloc = BlocProvider.of<SessionBloc>(context);
        if (sessionBloc.state != SessionReady()) {
          sessionBloc.add(SessionStart());
          // ignore: close_sinks
          SettingsBloc settingsBloc = BlocProvider.of<SettingsBloc>(context);
          settingsBloc.loadLang();
        }
      }
    });
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      key: _scaffoldKey,
      body: Container(
        child: BlocConsumer<SessionBloc, SessionState>(
          listener: (context, state) {
            if ( state is SessionFailure) {

            }
          },
          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");
              if (Auth().startPage == 'login') {
                return LoginPage();
              } else if (Auth().startPage == 'registration') {
                return RegistrationPage();
              } else {
                return MenuPage(parent: 0);
              }
            } else {
              print("else");
              return MenuPage(parent: 0);
            }
          }
        ),
      ),
      //bottomNavigationBar: BottomNavigator(bottomNavIndex: 0),
    );
  }
}