import 'package:aitrainer_app/model/cache.dart';
import 'package:aitrainer_app/model/customer.dart';
import 'package:aitrainer_app/model/workout_menu_tree.dart';
import 'package:aitrainer_app/repository/exercise_plan_repository.dart';
import 'package:aitrainer_app/repository/exercise_repository.dart';
import 'package:flutter_form_bloc/flutter_form_bloc.dart';

class ExerciseAddByPlanFormBloc extends FormBloc<String, String> {
  final ExerciseRepository exerciseRepository;
  final ExercisePlanRepository exercisePlanRepository;
  final WorkoutMenuTree workoutTree;
  final customerId;
  Customer customer;
  int step = 1;
  int countSteps = 1;

  final quantity1Field = TextFieldBloc(
  );

  final unitQuantity1Field = TextFieldBloc(
  );

  ExerciseAddByPlanFormBloc({this.exerciseRepository, this.exercisePlanRepository, this.customerId, this.workoutTree}) {
    addFieldBlocs(fieldBlocs: [
      quantity1Field,
      unitQuantity1Field,
    ]);

    quantity1Field.onValueChanges(onData: (previous, current) async* {
      exerciseRepository.setQuantity(current.valueToDouble);
    });

    unitQuantity1Field.onValueChanges(onData: (previous, current) async* {
      exerciseRepository.setUnitQuantity(unitQuantity1Field.valueToDouble);
    });

    exerciseRepository.exerciseType = workoutTree.exerciseType;
    if ( Cache().userLoggedIn.customerId == customerId) {
      customer = Cache().userLoggedIn;
    } else if ( Cache().getTrainee().customerId == customerId) {
      customer = Cache().getTrainee();
    }
    exercisePlanRepository.setActualPlanDetailByExerciseType(workoutTree.exerciseType);
    exerciseRepository.customer = customer;
    countSteps = exercisePlanRepository.getActualPlanDetail().serie;

    unitQuantity1Field.updateInitialValue(exercisePlanRepository.getActualPlanDetail().weightEquation);
    quantity1Field.updateInitialValue(exercisePlanRepository.getActualPlanDetail().repeats.toString());

  }

  @override
  void onSubmitting() async {

    try {
      emitLoading(progress: 30);
      step++;

      exerciseRepository.setUnitQuantity(unitQuantity1Field.valueToDouble);
      exerciseRepository.setQuantity(quantity1Field.valueToDouble);
      exerciseRepository.exercise.exercisePlanDetailId =
        exercisePlanRepository.getActualPlanDetail().exercisePlanDetailId;
      exerciseRepository.exercise.unit = workoutTree.exerciseType.unit;
      workoutTree.executed = true;
      print("On Submitting Add Exercise By Plan " + exerciseRepository.exercise.toJson().toString());
      await exerciseRepository.addExercise();

      emitSuccess(canSubmitAgain: true);
    } on Exception catch (ex) {
      emitFailure(failureResponse: ex.toString());
    }
  }

  //@override
  Future<void> close() {
    quantity1Field.close();
    unitQuantity1Field.close();

    return super.close();
  }
}