import 'package:business_panel/core/config/api_config.dart'; import 'package:business_panel/core/services/token_storage_service.dart'; import 'package:dio/dio.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:intl/intl.dart'; import 'discount_event.dart'; import 'discount_state.dart'; class DiscountBloc extends Bloc { DiscountBloc() : super(const DiscountState()) { final Dio _dio = Dio(); final TokenStorageService _tokenStorage = TokenStorageService(); on((event, emit) { List updatedImages = List.from(state.productImages); if (updatedImages.length > event.index) { updatedImages[event.index] = event.imagePath; } else { updatedImages.add(event.imagePath); } emit(state.copyWith(productImages: updatedImages)); }); on((event, emit) { emit(state.copyWith(productName: event.name)); }); on((event, emit) { emit(state.copyWith(discountTypeId: event.typeId)); }); on((event, emit) { emit(state.copyWith(description: event.description)); }); on((event, emit) { emit(state.copyWith(startDate: event.startDate, endDate: event.endDate)); }); on((event, emit) { emit(state.copyWith(startTime: event.startTime, endTime: event.endTime)); }); on((event, emit) { emit(state.copyWith(price: event.price)); }); on((event, emit) { emit(state.copyWith(discountedPrice: event.price)); }); on((event, emit) { emit(state.copyWith(notificationRadius: event.radius)); }); on((event, emit) async { emit(state.copyWith(isSubmitting: true, errorMessage: null)); try { final token = await _tokenStorage.getAccessToken(); if (token == null) { emit(state.copyWith(isSubmitting: false, errorMessage: "خطای احراز هویت.")); return; } List imageFiles = []; for (var imagePath in state.productImages) { imageFiles.add(await MultipartFile.fromFile( imagePath, filename: imagePath.split('/').last, )); } final data = { 'Name' : state.productName, 'Images': imageFiles, 'Type': state.discountTypeId, 'Description': state.description, 'Price': double.tryParse(state.price), 'NPrice': double.tryParse(state.discountedPrice), 'Start': state.startDate != null ? DateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(state.startDate!) : null, 'End': state.endDate != null ? DateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(state.endDate!) : null, 'StartTime': state.startTime, 'EndTime': state.endTime, 'Radius': state.notificationRadius, }; final formData = FormData.fromMap(data); await _dio.post( ApiConfig.addDiscount, data: formData, options: Options( headers: {'Authorization': 'Bearer $token'}, ), ); emit(state.copyWith(isSubmitting: false, isSuccess: true)); } on DioException catch (e) { emit(state.copyWith( isSubmitting: false, errorMessage: e.response?.data['message'] ?? 'خطای سرور.', )); } catch (e) { emit(state.copyWith(isSubmitting: false, errorMessage: 'خطای ناشناخته: ${e.toString()}')); } }); } }