import 'package:aitrainer_app/bloc/login_form_bloc.dart';
import 'package:aitrainer_app/bloc/account/account_bloc.dart';
import 'package:aitrainer_app/localization/app_localization.dart';
import 'package:aitrainer_app/repository/user_repository.dart';
import 'package:aitrainer_app/util/common.dart';
import 'package:aitrainer_app/util/trans.dart';
import 'package:aitrainer_app/widgets/app_bar_min.dart';
import 'package:aitrainer_app/widgets/splash.dart';
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_form_bloc/flutter_form_bloc.dart';

import '../library_keys.dart';

class LoginPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return LoginWidget();
  }
}

class LoginWidget extends StatefulWidget {
  LoginWidget();

  @override
  State<StatefulWidget> createState() => _LoginWidget();
}

class _LoginWidget extends State<LoginWidget> with Common, Trans {
  final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();

  @override
  Widget build(BuildContext context) {
    final accountBloc = BlocProvider.of<AccountBloc>(context);
    setContext(context);
    return BlocProvider(
        create: (context) => LoginFormBloc(userRepository: UserRepository(), accountBloc: accountBloc),
        child: Builder(builder: (context) {
          final loginBloc = BlocProvider.of<LoginFormBloc>(context);
          return Scaffold(
            //key: _scaffoldKey,
            appBar: AppBarMin(),
            body: FormBlocListener<LoginFormBloc, String, String>(
                onSubmitting: (context, state) {
                  LoadingDialog.show(context);
                },
                onSuccess: (context, state) {
                  LoadingDialog.hide(context);
                  Navigator.of(context).pushNamed('home');
                },
                onFailure: (context, state) {
                  LoadingDialog.hide(context);
                  Scaffold.of(context).showSnackBar(SnackBar(
                      backgroundColor: Colors.orange, content: Text(t(state.failureResponse), style: TextStyle(color: Colors.white))));
                },
                onLoaded: (context, state) {},
                child: loadForm(loginBloc, accountBloc)),
          );
        }));
  }

  Widget loadForm(LoginFormBloc loginBloc, AccountBloc accountBloc) {
    return SafeArea(
      top: false,
      bottom: false,
      child: Container(
        decoration: BoxDecoration(
          image: DecorationImage(
            image: AssetImage('asset/image/WT_login.png'),
            fit: BoxFit.cover,
            alignment: Alignment.center,
          ),
        ),
        child: buildLoginForm(loginBloc, accountBloc),
      ),
    );
  }

  Widget buildLoginForm(LoginFormBloc formBloc, AccountBloc accountBloc) {
    return Form(
      key: _scaffoldKey,
      child: Container(
          padding: const EdgeInsets.only(left: 15, right: 50),
          child: ListView(shrinkWrap: false, padding: EdgeInsets.only(top: 150.0), children: <Widget>[
            Divider(color: Colors.transparent),
            /* FlatButton(
                  child: new Image.asset(
                    'asset/image/login_fb.png',
                    width: cWidth * .85,
                  ),
                  onPressed: () => {
                    //_fbLogin(),
                    FirebaseApi().signInWithFacebook(),
                    print("Login with FB"),
                  },
                ),
                Text(AppLocalizations.of(context).translate("OR")),*/
            Divider(),
            Row(
              mainAxisAlignment: MainAxisAlignment.start,
              children: [
                new InkWell(
                  child: new Text(AppLocalizations.of(context).translate('Login'),
                      style: TextStyle(fontWeight: FontWeight.bold, fontSize: 24)),
                ),
              ],
            ),
            Divider(),
            TextFieldBlocBuilder(
              key: LibraryKeys.loginEmailField,
              textFieldBloc: formBloc.emailField,
              decoration: InputDecoration(
                fillColor: Colors.white,
                filled: true,
                labelText: 'Email',
              ),
            ),
            Divider(
              color: Colors.transparent,
            ),
            TextFieldBlocBuilder(
              key: LibraryKeys.loginPasswordField,
              textFieldBloc: formBloc.passwordField,
              decoration: InputDecoration(
                fillColor: Colors.white,
                filled: true,
                labelText: 'Password',
              ),
              suffixButton: SuffixButton.obscureText,
            ),
            Divider(
              color: Colors.transparent,
            ),
            Row(mainAxisAlignment: MainAxisAlignment.end, children: <Widget>[
              new FlatButton(
                  key: LibraryKeys.loginOKButton,
                  child: Image.asset('asset/image/WT_OK.png', width: 100, height: 100),
                  onPressed: () => {formBloc.add(SubmitFormBloc())}),
            ]),
            Divider(
              color: Colors.transparent,
            ),
            Row(mainAxisAlignment: MainAxisAlignment.spaceAround, children: <Widget>[
              new InkWell(
                child: new Text(AppLocalizations.of(context).translate('SignUp')),
                onTap: () => Navigator.of(context).pushNamed('registration'),
              ),
              Spacer(flex: 2),
              new InkWell(
                child: new Text(AppLocalizations.of(context).translate('I forgot the password')),
                onTap: () => Navigator.of(context).pushNamed('resetPassword'),
              ),
              Spacer(flex: 2),
              new InkWell(
                child: new Text(AppLocalizations.of(context).translate('Privacy')),
                onTap: () => Navigator.of(context).pushNamed('gdpr'),
              ),
            ]),
          ])),
    );
  }
}