import 'package:aitrainer_app/model/cache.dart'; import 'package:aitrainer_app/model/sport.dart'; import 'package:aitrainer_app/repository/customer_repository.dart'; import 'package:aitrainer_app/repository/mautic_repository.dart'; import 'package:aitrainer_app/util/app_language.dart'; import 'package:aitrainer_app/util/common.dart'; import 'package:bloc/bloc.dart'; import 'package:equatable/equatable.dart'; import 'package:flutter/material.dart'; import 'package:meta/meta.dart'; part 'customer_change_event.dart'; part 'customer_change_state.dart'; class CustomerChangeBloc extends Bloc { final CustomerRepository customerRepository; bool visiblePassword = false; int? year = 1990; double weight = 60; double height = 170; CustomerChangeBloc({required this.customerRepository}) : super(CustomerChangeInitial()) { this._load(); on(_onLoad); on(_onGoalChange); on(_onChangePasswordObscure); on(_onFitnessChange); on(_onBirthyearChange); on(_onWeightChange); on(_onHeightChange); on(_onBodytypeChange); on(_onEmailChange); on(_onPasswordChange); on(_onFirstNameChange); on(_onNameChange); on(_onGenderChange); on(_onSportChange); on(_onSaveFitness); on(_onSaveGoal); on(_onSaveSex); on(_onSaveWeight); on(_onSaveHeight); on(_onSave); } void _onLoad(CustomerLoad event, Emitter emit) async { emit(CustomerChangeLoading()); emit(CustomerDataChanged()); } void _onGoalChange(CustomerGoalChange event, Emitter emit) { emit(CustomerChangeLoading()); customerRepository.setGoal(event.goal); emit(CustomerDataChanged()); } void _onChangePasswordObscure(CustomerChangePasswordObscure event, Emitter emit) { emit(CustomerChangeLoading()); visiblePassword = !visiblePassword; emit(CustomerDataChanged()); } void _onFitnessChange(CustomerFitnessChange event, Emitter emit) { emit(CustomerChangeLoading()); customerRepository.setFitnessLevel(event.fitness); selectedFitnessItem = event.fitness; emit(CustomerDataChanged()); } void _onBirthyearChange(CustomerBirthYearChange event, Emitter emit) { emit(CustomerChangeLoading()); customerRepository.setBirthYear(event.year); year = event.year; emit(CustomerDataChanged()); } void _onWeightChange(CustomerWeightChange event, Emitter emit) { emit(CustomerChangeLoading()); customerRepository.setWeight(event.weight); weight = event.weight.toDouble(); emit(CustomerDataChanged()); } void _onHeightChange(CustomerHeightChange event, Emitter emit) { emit(CustomerChangeLoading()); customerRepository.setHeight(event.height); height = event.height.toDouble(); emit(CustomerDataChanged()); } void _onBodytypeChange(CustomerBodyTypeChange event, Emitter emit) { emit(CustomerChangeLoading()); customerRepository.setBodyType(event.bodyType); emit(CustomerDataChanged()); } void _onEmailChange(CustomerEmailChange event, Emitter emit) { emit(CustomerChangeLoading()); customerRepository.setEmail(event.email); emit(CustomerDataChanged()); } void _onPasswordChange(CustomerPasswordChange event, Emitter emit) { emit(CustomerChangeLoading()); customerRepository.setPassword(event.password); emit(CustomerDataChanged()); } void _onFirstNameChange(CustomerFirstNameChange event, Emitter emit) { emit(CustomerChangeLoading()); customerRepository.setFirstName(event.firstName); emit(CustomerDataChanged()); } void _onNameChange(CustomerNameChange event, Emitter emit) { emit(CustomerChangeLoading()); customerRepository.setName(event.name); emit(CustomerDataChanged()); } void _onGenderChange(CustomerGenderChange event, Emitter emit) { emit(CustomerChangeLoading()); customerRepository.setSex(event.gender == 0 ? "m" : "w"); emit(CustomerDataChanged()); } void _onSportChange(CustomerSportChange event, Emitter emit) { emit(CustomerChangeLoading()); selectedSport = event.sport; print("Selected Sport $selectedSport"); emit(CustomerDataChanged()); } void _onSaveFitness(CustomerSaveFitness event, Emitter emit) { emit(CustomerChangeLoading()); if (customerRepository.customer!.fitnessLevel == null) { emit(CustomerSaveError(message: "Please selectyour fitness level")); } else { emit(CustomerSaveSuccess()); } } void _onSaveGoal(CustomerSaveGoal event, Emitter emit) { emit(CustomerChangeLoading()); if (customerRepository.customer!.goal == null) { emit(CustomerSaveError(message: "Please select your goal")); } else { emit(CustomerSaveSuccess()); } } void _onSaveSex(CustomerSaveSex event, Emitter emit) { emit(CustomerChangeLoading()); if (customerRepository.customer!.sex == null) { emit(CustomerSaveError(message: "Please selectyour biological gender")); } else { emit(CustomerSaveSuccess()); } } void _onSaveWeight(CustomerSaveWeight event, Emitter emit) { emit(CustomerChangeLoading()); emit(CustomerSaveSuccess()); } void _onSaveHeight(CustomerSaveHeight event, Emitter emit) { emit(CustomerChangeLoading()); emit(CustomerSaveSuccess()); } void _onSave(CustomerSave event, Emitter emit) async { emit(CustomerSaving()); try { if (validation()) { if (selectedFitnessItem != null) { customerRepository.setFitnessLevel(selectedFitnessItem!); } if (selectedSport != null) { customerRepository.customer!.sportId = selectedSport!.sportId; } if (customerRepository.customer!.lang == null) { customerRepository.customer!.lang = AppLanguage().appLocal.languageCode; } await customerRepository.saveCustomer(); MauticRepository mauticRepository = MauticRepository(customerRepository: customerRepository); await mauticRepository.sendMauticDataChange(); Cache().initBadges(); emit(CustomerSaveSuccess()); } else { emit(CustomerSaveError(message: "Please provide the necessary information")); } } on Exception catch (e) { emit(CustomerSaveError(message: e.toString())); } } void _load() { if (this.customerRepository.customer == null) { this.customerRepository.createNew(); } year = this.customerRepository.customer!.birthYear; if (year == null || year == 0) { year = 1990; } weight = this.customerRepository.getWeight() == 0 ? 60 : this.customerRepository.getWeight(); height = this.customerRepository.getHeight() == 0 ? 170 : this.customerRepository.getHeight(); selectedFitnessItem = customerRepository.fitnessLevel; selectedSport = customerRepository.getSport(); } Sport? selectedSport; String? selectedFitnessItem; bool validation() { if (customerRepository.customer == null) throw Exception("Customer object not defined"); return true; } String? emailValidation(String? email) { String? message = Common.emailValidation(email); return message; } String? passwordValidation(String? value) { String? message = Common.passwordValidation(value); return message; } String? nameValidation(String? value) { if (value == null || value.length == 0) { return "Name too short"; } return null; } Sport? get getSelectedSport => this.selectedSport; set setSelectedSport(Sport? selectedSport) => this.selectedSport = selectedSport; }