import 'dart:async';

import 'package:aitrainer_app/repository/customer_repository.dart';
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:meta/meta.dart';

part 'customer_change_event.dart';
part 'customer_change_state.dart';

class CustomerChangeBloc extends Bloc<CustomerChangeEvent, CustomerChangeState> {
  final CustomerRepository customerRepository;
  CustomerChangeBloc({this.customerRepository}) : super(CustomerChangeInitial());

  @override
  Stream<CustomerChangeState> mapEventToState(
    CustomerChangeEvent event,
  ) async* {
    try {
      if (event is CustomerGoalChange) {
        customerRepository.setGoal(event.goal);
        yield CustomerDataChanged();
      } else if (event is CustomerFitnessChange) {
        customerRepository.setFitnessLevel(event.fitness);
        yield CustomerDataChanged();
      } else if (event is CustomerBodyTypeChange) {
        customerRepository.setBodyType(event.bodyType);
        yield CustomerDataChanged();
      } else if (event is CustomerSave) {
        yield CustomerSaving();
        await customerRepository.saveCustomer();
        yield CustomerSaveSuccess();
      }
    } on Exception catch(e) {
      yield CustomerSaveError(message: e.toString());
    }
  }
}