import 'package:flutter/cupertino.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:hl_lieferservice/feature/car_selection/repository/car_selection_repository.dart'; import 'package:hl_lieferservice/feature/cars/model/selection.dart'; import 'package:hl_lieferservice/model/car.dart'; import 'events.dart'; import 'state.dart'; class CarSelectBloc extends Bloc { final CarSelectionRepository repository; CarSelectBloc({required this.repository}) : super(CarSelectInitial()) { on(_load); on(_confirm); on(_change); on(_cancel); } Future _load( CarSelectLoad event, Emitter emit, ) async { try { emit(CarSelectLoading()); final CarSelection? stored = await repository.getSelection(); final today = DateTime.now(); final bool validForToday = stored != null && stored.selectedCarId != null && stored.selectedCarPlate != null && stored.date.year == today.year && stored.date.month == today.month && stored.date.day == today.day; if (validForToday) { emit( CarSelectComplete( selectedCar: Car( id: stored.selectedCarId!, plate: stored.selectedCarPlate!, ), ), ); } else { emit(CarSelectRequired()); } } catch (e, st) { debugPrint('CarSelectBloc._load failed: $e'); debugPrint('Stacktrace: $st'); emit(CarSelectFailed()); } } void _change(CarSelectChange event, Emitter emit) { final previousCar = state is CarSelectComplete ? (state as CarSelectComplete).selectedCar : null; emit(CarSelectRequired(previousCar: previousCar)); } void _cancel(CarSelectCancel event, Emitter emit) { // Restore without touching SharedPreferences — no tour reload needed. emit(CarSelectComplete(selectedCar: event.car)); } Future _confirm( CarSelectConfirm event, Emitter emit, ) async { try { final today = DateTime.now(); await repository.saveSelection( CarSelection( date: today, selectedCarId: event.car.id, selectedCarPlate: event.car.plate, ), ); emit(CarSelectComplete(selectedCar: event.car)); } catch (e, st) { debugPrint('CarSelectBloc._confirm failed: $e'); debugPrint('Stacktrace: $st'); emit(CarSelectFailed()); } } }