import 'package:aitrainer_app/bloc/exercise_form_bloc.dart';
import 'package:aitrainer_app/localization/app_language.dart';
import 'package:aitrainer_app/localization/app_localization.dart';
import 'package:aitrainer_app/model/auth.dart';
import 'package:aitrainer_app/model/exercise_type.dart';
import 'package:aitrainer_app/repository/exercise_repository.dart';
import 'package:flutter/services.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_form_bloc/flutter_form_bloc.dart';

class ExerciseNewPage extends StatefulWidget{
  _ExerciseNewPageState createState() => _ExerciseNewPageState();
}

class _ExerciseNewPageState extends State<ExerciseNewPage> {

  @override
  Widget build(BuildContext context) {
    final ExerciseType exerciseType = ModalRoute.of(context).settings.arguments;

    return BlocProvider(
      create: (context) => ExerciseFormBloc(exerciseRepository: ExerciseRepository()),
      child: Builder(builder: (context) {
        // ignore: close_sinks
        final exerciseBloc = BlocProvider.of<ExerciseFormBloc>(context);

        exerciseBloc.exerciseRepository.setExerciseType(exerciseType);
        String exerciseName = AppLanguage().appLocal == Locale("en") ?
          exerciseBloc.exerciseRepository.exerciseType.name :
          exerciseBloc.exerciseRepository.exerciseType.nameTranslation;

        return Form(
           autovalidate: true,
          child: Scaffold(
            resizeToAvoidBottomInset: true,
            appBar: AppBar(
              backgroundColor: Colors.transparent,
              title: Row(
                mainAxisAlignment: MainAxisAlignment.end,
                children: <Widget>[
                  Image.asset(
                    'asset/image/WT_long_logo.png',
                    fit: BoxFit.cover,
                    height: 65.0,
                  ),
                ],
              ),
              leading: IconButton(
                icon: Icon(Icons.arrow_back, color: Colors.white),
                onPressed: () => Navigator.of(context).pop(),
              ),
            ),
            body: Container(
                width: MediaQuery.of(context).size.width,
                height: MediaQuery.of(context).size.height,
                decoration: BoxDecoration(
                image: DecorationImage(
                  image: AssetImage('asset/image/WT_light_background.png'),
                  fit: BoxFit.fill,
                  alignment: Alignment.center,
                ),
              ),
                child: Container(
                  padding: const EdgeInsets.only (top: 25, left:25, right: 25),
                  child: SingleChildScrollView(
                    scrollDirection: Axis.vertical,
                    child: Column(
                      mainAxisAlignment: MainAxisAlignment.spaceAround,
                      children: <Widget>[
                        Divider(color: Colors.transparent,),
                        Divider(color: Colors.transparent,),
                        Text(AppLocalizations.of(context).translate('Save Exercise'),
                          style: TextStyle(fontSize: 14, color: Colors.blueAccent)),
                        Text(exerciseName,
                          style: TextStyle(fontWeight: FontWeight.bold, fontSize: 18, color: Colors.deepOrange),
                          overflow: TextOverflow.fade,
                          maxLines: 1,
                          softWrap: true,
                        ),


                        Divider(color: Colors.transparent,),
                        FlatButton(
                          child: Row(

                            mainAxisAlignment: MainAxisAlignment.spaceBetween,
                            children: [
                              Icon(Icons.description),
                              Text(AppLocalizations.of(context).translate("Description"),
                                style: TextStyle(
                                  color: Colors.blueAccent, fontWeight: FontWeight.normal, fontSize: 14  )),
                              Icon(Icons.arrow_forward_ios),
                            ]),
                          textColor: Colors.blueAccent,
                          color: Colors.transparent,
                          onPressed: () => {
                            Navigator.of(context).pushNamed('exerciseTypeDescription', arguments: exerciseBloc.exerciseRepository),
                          },
                        ),
                        Divider(color: Colors.transparent,),
                        columnQuantityUnit(exerciseBloc),
                        Divider(color: Colors.transparent,),
                        Divider(color: Colors.transparent,),
                        Divider(color: Colors.transparent,),

                        columnQuantity(exerciseBloc),
                        Divider(),

                      RaisedButton(
                        textColor: Colors.white,
                        color: Colors.deepOrange,
                        focusColor: Colors.white,
                        onPressed: () =>
                        {
                            confirmationDialog( exerciseBloc ),
                        },
                        child: Text(AppLocalizations.of(context).translate("Save"), style: TextStyle(fontSize: 16),)
                      ),
                        Divider(color: Colors.transparent,),
                        Divider(color: Colors.transparent,),
                        Divider(color: Colors.transparent,),

                      ]),
                  )
                )
              ),
          ),
        );
      })
    );
  }

  Column columnQuantityUnit( ExerciseFormBloc bloc ) {
    Column column = Column();
    if ( bloc.exerciseRepository.exerciseType != null &&
          bloc.exerciseRepository.exerciseType.unitQuantity == "1") {
      column = Column(
          children: [
            TextFieldBlocBuilder(
              textFieldBloc: bloc.unitQuantityField,
              textAlign: TextAlign.center,
              style: TextStyle(fontSize: 30,
                color: Colors.lightBlue,
                fontWeight: FontWeight.bold),
              inputFormatters: [
                WhitelistingTextInputFormatter (RegExp(r"[\d.]"))
              ],
              onChanged: (input) => {
                print ("UnitQuantity value $input"),
                bloc.exerciseRepository.setUnitQuantity(
                  double.parse(input))
              },
              decoration: InputDecoration(
                fillColor: Colors.white,
                filled: false,
                hintStyle: TextStyle(fontSize: 16, color: Colors.black54, fontWeight: FontWeight.w100),
                hintText: AppLocalizations.of(context).translate("The number of the exercise done with"),
                labelStyle: TextStyle(fontSize: 16, color: Colors.lightBlue),
                labelText: AppLocalizations.of(context).translate(
                  bloc.exerciseRepository.exerciseType.unitQuantityUnit),
              ),
            ),
            new InkWell(
              child: new Text(AppLocalizations.of(context).translate(
                bloc.exerciseRepository.exerciseType.unitQuantityUnit),
                  style: TextStyle(fontSize: 16)),
            ),

          ]);
    };
    return column;
  }

  Column columnQuantity( ExerciseFormBloc bloc ) {
    Column column = Column(
          children: [
            TextFieldBlocBuilder(
              textFieldBloc: bloc.quantityField,
              textAlign: TextAlign.center,
              style: TextStyle(fontSize: 50,
                color: Colors.deepOrange,
                fontWeight: FontWeight.bold),
              inputFormatters: [
                WhitelistingTextInputFormatter (RegExp(r"[\d.]"))
              ],
              onChanged: (input) =>
              {
                print ("Quantity value $input"),
                bloc.exerciseRepository.setQuantity(double.parse(input)),
                bloc.exerciseRepository.setUnit(bloc.exerciseRepository.exerciseType.unit)
              },
              decoration: InputDecoration(
                fillColor: Colors.white,
                filled: false,
                hintStyle: TextStyle(fontSize: 16, color: Colors.black54, fontWeight: FontWeight.w100),
                hintText: AppLocalizations.of(context).translate("The number of the exercise"),
                labelStyle: TextStyle(fontSize: 16, color: Colors.deepOrange),
                labelText: AppLocalizations.of(context).translate(
                  bloc.exerciseRepository.exerciseType.unit),
              ),
            ),

          ]);

    return column;
  }

  String  validateNumberInput( input ) {
    String error = AppLocalizations.of(context).translate("Please type the right quantity 0-10000");
    dynamic rc = ( input != null && input.length > 0);
    if ( ! rc ) {
      return null;
    }

    Pattern pattern = r'^\d+(?:\.\d+)?$';
    RegExp regex = new RegExp(pattern);
    if (!regex.hasMatch(input)) {
      return error;
    }

    rc = double.tryParse(input);
    if ( rc == null ) {
      return error;
    }



    if ( ! ( double.parse(input) < 10000 && double.parse(input) > 0) ) {
      return error;
    }

    return null;
  }

  void confirmationDialog( ExerciseFormBloc bloc ) {

    print("exercise validated " + bloc.exerciseRepository.exercise.quantity.toString());
    if ( bloc.exerciseRepository.exercise.quantity == null) {
      return;
    }

    String quantity = bloc.exerciseRepository.exercise.quantity % 1 == 0?
      bloc.exerciseRepository.exercise.quantity.round().toString() :
      bloc.exerciseRepository.exercise.quantity.toString();

    String unitQuantity = bloc.exerciseRepository.exercise.unitQuantity % 1 == 0?
    bloc.exerciseRepository.exercise.unitQuantity.round().toString() :
    bloc.exerciseRepository.exercise.unitQuantity.toString();


    showCupertinoDialog(
      useRootNavigator: true,
      context: context,
      //barrierDismissible: false,
      builder:(_) => CupertinoAlertDialog(
        title: Text(AppLocalizations.of(context).translate("Do you save this exercise with these parameters?")),
        content: Column(

        children: [
          Divider(),
          Text(AppLocalizations.of(context).translate("Exercise") + ": " +
              AppLocalizations.of(context).translate(bloc.exerciseRepository.exerciseType.name),
            style: (TextStyle(color: Colors.blue)),),
          Text(quantity + " " +
              AppLocalizations.of(context).translate(bloc.exerciseRepository.exerciseType.unit),
            style: (TextStyle(color: Colors.deepOrange)),),
          Text(bloc.exerciseRepository.exerciseType.unitQuantity == "1" ?
              AppLocalizations.of(context).translate("with") + " "
              + unitQuantity + " "
              + AppLocalizations.of(context).translate(bloc.exerciseRepository.exerciseType.unitQuantityUnit) :
              "",
            style: (TextStyle(color: Colors.deepOrange)),
          ),

          ]),
        actions: [
          FlatButton(
            child: Text(AppLocalizations.of(context).translate("No")),
            onPressed: () => Navigator.pop(context),
          ),
          FlatButton(
            child: Text(AppLocalizations.of(context).translate("Yes")),
            onPressed: () => {
                bloc.exerciseRepository.setCustomer(Auth().userLoggedIn),
                bloc.exerciseRepository.addExercise(),

                Navigator.pop(context),
                Navigator.pop(context),
              },
          )
        ],
      )
    );
  }
}