import 'dart:io'; import 'package:be_happy/domain/entities/scooter_order.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import '../../domain/usecase/finish_ride_usecase.dart'; import '../../domain/usecase/upload_scooter_photos_usecase.dart'; import '../event/send_photo_event.dart'; import '../state/send_photo_state.dart'; import '../../core/result.dart'; import '../../core/failures.dart'; class SendPhotoBloc extends Bloc { final UploadScooterPhotosUsecase uploadScooterPhotosUsecase; final FinishRideUsecase _finishRideUsecase; SendPhotoBloc(this.uploadScooterPhotosUsecase, this._finishRideUsecase) : super(const SendPhotoState()) { on(_onPhotoSelected); on(_onPhotoUploadSubmitted); } void _onPhotoSelected(PhotoSelected event, Emitter emit) { emit(state.copyWith(selectedImages: event.imagePaths)); } Future _onPhotoUploadSubmitted( PhotoUploadSubmitted event, Emitter emit) async { if (state.selectedImages.isEmpty) { emit(state.copyWith( status: SendPhotoStatus.failure, errorMessage: 'Выберите хотя бы одно фото', )); return; } emit(state.copyWith(status: SendPhotoStatus.loading)); final imageFiles = state.selectedImages.map((path) => File(path)).toList(); final result = await uploadScooterPhotosUsecase(imageFiles); switch (result) { case Success>(): // ✅ Защита: если data null или пустой — не вызываем finish if (result.data == null || result.data!.isEmpty) { emit(state.copyWith( status: SendPhotoStatus.failure, errorMessage: 'Не удалось получить ID загруженных фото', )); return; } // ✅ Передаём два параметра в UseCase final finishResult = await _finishRideUsecase( event.orderId, result.data! // ✅ ! т.к. проверили выше ); switch (finishResult) { case Success(): emit(state.copyWith( status: SendPhotoStatus.success, recievedPhotoIds: result.data, )); case Failure(): print("❌ FINISH ERROR: ${finishResult.failure.message}"); emit(state.copyWith( status: SendPhotoStatus.failure, errorMessage: 'Ошибка завершения поездки', )); } case Failure(): emit(state.copyWith( status: SendPhotoStatus.failure, errorMessage: 'Ошибка загрузки фото: ${result.failure.message}', )); } } }