import 'dart:io';
import 'package:flutter_bloc/flutter_bloc.dart';

import 'package:imagini/blocs/login/events.dart';
import 'package:imagini/blocs/login/states.dart';
import 'package:imagini/services/api/api.dart';
import 'package:imagini/services/api/exceptions.dart';

class LoginBloc extends Bloc<LoginEvents, LoginState> {
  final ImaginiAPI imaginiAPI;
  Map<String, String> loginResult;
  String exampleResult;

  LoginBloc({ this.imaginiAPI }) : super(LoginInitState());

  @override
  Stream<LoginState> mapEventToState(LoginEvents event) async* {
    switch (event) {
      case LoginEvents.loginResult:
        yield LoginLoading();
        try {
          // exampleResult = await imaginiAPI.exampleApi();
          loginResult = await imaginiAPI.loginAPI("admin", "admin");
          yield LoginSuccess();
        } on SocketException {
          yield LoginFailed(
            error: ConnectionRefusedException('No Internet'),
          );
        } on FormatException {
          yield LoginFailed(
            error: InvalidFormatException('Invalid Response Format'),
          );
        } catch (e) {
          print(e);
          yield LoginFailed(
            error: UnknownException('Unknown Error'),
          );
        }
        break;
    }
  }
}