import 'dart:core';
import 'package:bloc/bloc.dart';
import 'package:comwell_key_app/domain/repositories/booking_details_repository.dart';
import 'package:comwell_key_app/key/repository/key_repository.dart';
import 'package:comwell_key_app/utils/seos_repository.dart';
import 'package:equatable/equatable.dart';
import 'package:flutter/foundation.dart';
import 'package:sentry_flutter/sentry_flutter.dart';
import 'package:seos_mobile_keys_plugin/app_usage_api.dart';
part 'key_event.dart';
part 'key_state.dart';
class KeyBloc extends Bloc<KeyEvent, KeyState> {
final KeyRepository keyRepository;
final BookingDetailsRepository bookingDetailsRepository;
final SeosRepository seosRepository;
KeyBloc({
required this.seosRepository,
required this.keyRepository,
required this.bookingDetailsRepository,
}) : super(KeyState.unknown()) {
on<SearchForKeys>((event, emit) async {
emit(KeyState.searchForKeys());
try {
final keys = await seosRepository.refreshKeys();
emit(KeyState.validKeys(keys));
add(const StartScanning());
} catch (e, st) {
if (!kDebugMode) Sentry.captureException(e, stackTrace: st);
emit(KeyState.searchForKeysError(e.toString()));
}
});
on<StartScanning>((event, emit) async {
try {
await keyRepository.checkDeviceInfo();
emit(KeyState.scanning());
// for (var i = 0; i < 10; i++) {
// try {
// print("qqq start scanning=$i");
// await Future.delayed(const Duration(seconds: 1));
// await keyRepository.openClosestReader();
// print("qqq openClosestReader=$i");
// keyRepository.stopScanning();
// emit(KeyState.openClosestReaderSuccess());
// break;
// } catch (e) {
// print("qqq failed, rescanning");
// continue;
// emit(KeyState.openClosestReaderError(e.toString()));
// }
// }
} catch (e, st) {
if (!kDebugMode) Sentry.captureException(e, stackTrace: st);
emit(KeyState.scanningError(e.toString()));
}
});
on<SetRootOpeningTrigger>((event, emit) async {
try {
await keyRepository.setRootOpeningTrigger();
} catch (e, st) {
if (!kDebugMode) Sentry.captureException(e, stackTrace: st);
emit(KeyState.setRootOpeningTriggerError(e.toString()));
}
});
on<RemoveRootOpeningTrigger>((event, emit) async {
try {
await keyRepository.removeRootOpeningTrigger();
} catch (e, st) {
if (!kDebugMode) Sentry.captureException(e, stackTrace: st);
emit(KeyState.removeRootOpeningTriggerError(e.toString()));
}
});
add(SearchForKeys());
}
}