import 'package:aitrainer_app/bloc/account/account_bloc.dart';
import 'package:aitrainer_app/bloc/registration_form_bloc.dart';
import 'package:aitrainer_app/localization/app_localization.dart';
import 'package:aitrainer_app/util/common.dart';
import 'package:aitrainer_app/repository/customer_repository.dart';
import 'package:aitrainer_app/repository/user_repository.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_facebook_login/flutter_facebook_login.dart';
import 'package:flutter_form_bloc/flutter_form_bloc.dart';

import '../library_keys.dart';

class RegistrationPage extends StatelessWidget {
  final UserRepository userRepository = UserRepository();
  final CustomerRepository customerRepository = CustomerRepository();

  @override
  Widget build(BuildContext context) {
    return RegistrationWidget(userRepository: userRepository, customerRepository: customerRepository);
  }
}

class RegistrationWidget extends StatefulWidget {
  final UserRepository userRepository;
  final CustomerRepository customerRepository;

  RegistrationWidget({this.userRepository, this.customerRepository});

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

class _RegistrationWidget extends State<RegistrationWidget> with Common {
  final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();

  @override
  Widget build(BuildContext context) {
    // ignore: close_sinks
    final accountBloc = BlocProvider.of<AccountBloc>(context);
    return BlocProvider(
        create: (context) => RegistrationFormBloc(userRepository: UserRepository(), accountBloc: accountBloc),
        child: Builder(builder: (context) {
          // ignore: close_sinks
          final registrationBloc = BlocProvider.of<RegistrationFormBloc>(context);

          return Scaffold(
            key: _scaffoldKey,
            appBar: AppBarMin(),
            body: FormBlocListener<RegistrationFormBloc, String, String>(
              onSubmitting: (context, state) {
                LoadingDialog.show(context);
              },
              onSuccess: (context, state) {
                LoadingDialog.hide(context);
                Navigator.of(context).pushNamed('customerModifyPage');
              },
              onFailure: (context, state) {
                LoadingDialog.hide(context);
                showInSnackBar(state.failureResponse);
              },
              child: SafeArea(
                bottom: false,
                child: Container(
                  decoration: BoxDecoration(
                    image: DecorationImage(
                      image: AssetImage('asset/image/WT_login.png'),
                      fit: BoxFit.cover,
                      //height: double.infinity,
                      //width: double.infinity,
                      alignment: Alignment.center,
                    ),
                  ),
                  child: Form(
                    child: Container(
                        padding: const EdgeInsets.only(left: 25, right: 50),
                        child: ListView(shrinkWrap: false, padding: EdgeInsets.only(top: 150.0),
                            //mainAxisAlignment: MainAxisAlignment.spaceAround,
                            children: <Widget>[
                              Divider(
                                color: Colors.transparent,
                              ),
                              //Spacer(flex:4),

                              /* FlatButton(
                              child: new Image.asset(
                                'asset/image/login_fb.png',
                                width: cWidth * .85,
                              ),
                              onPressed: () => {
                                // _fbLogin(),
                                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('SignUp'),
                                        style: TextStyle(fontWeight: FontWeight.bold, fontSize: 24)),
                                  ),
                                ],
                              ),
                              Divider(),
                              TextFieldBlocBuilder(
                                key: LibraryKeys.loginEmailField,
                                textFieldBloc: registrationBloc.emailField,
                                decoration: InputDecoration(
                                  fillColor: Colors.white,
                                  filled: true,
                                  labelText: 'Email',
                                ),
                              ),
                              Divider(
                                color: Colors.transparent,
                              ),
                              TextFieldBlocBuilder(
                                key: LibraryKeys.loginPasswordField,
                                textFieldBloc: registrationBloc.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(
                                    child: Image.asset('asset/image/WT_OK.png', width: 100, height: 100),
                                    onPressed: () => {registrationBloc.add(SubmitFormBloc())}),
                              ]),
                              Row(mainAxisAlignment: MainAxisAlignment.spaceAround, children: <Widget>[
                                new InkWell(
                                  child: new Text(AppLocalizations.of(context).translate('Login')),
                                  onTap: () => Navigator.of(context).pushNamed('login'),
                                ),
                                Spacer(flex: 1),
                                new InkWell(
                                  child: new Text(AppLocalizations.of(context).translate('Privacy')),
                                  onTap: () => Navigator.of(context).pushNamed('gdpr'),
                                ),
                                Spacer(flex: 2),
                              ]),
                              //Spacer(flex:2),
                            ])),
                  ),
                ),
              ),
            ),
          );
        }));
  }

  void showInSnackBar(String error) {
    _scaffoldKey.currentState.showSnackBar(SnackBar(
        backgroundColor: Colors.orange,
        content: Text(AppLocalizations.of(context).translate("There is an error: during registration:") + " " + error,
            style: TextStyle(color: Colors.white))));
  }
}