/// BLoC pour la gestion des paramètres système (Clean Architecture) library system_settings_bloc; import 'package:dio/dio.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:injectable/injectable.dart'; import '../../domain/usecases/get_settings.dart'; import '../../domain/usecases/update_settings.dart'; import '../../domain/usecases/get_cache_stats.dart'; import '../../domain/usecases/clear_cache.dart' as uc; import '../../domain/usecases/reset_settings.dart'; import '../../domain/repositories/system_config_repository.dart'; import 'system_settings_event.dart'; import 'system_settings_state.dart'; @injectable class SystemSettingsBloc extends Bloc { final GetSettings _getSettings; final UpdateSettings _updateSettings; final GetCacheStats _getCacheStats; final uc.ClearCache _clearCache; final ResetSettings _resetSettings; final ISystemConfigRepository _repository; // Pour méthodes non-couvertes (metrics, test DB, test email) SystemSettingsBloc( this._getSettings, this._updateSettings, this._getCacheStats, this._clearCache, this._resetSettings, this._repository, ) : super(SystemSettingsInitial()) { on(_onLoadSystemConfig); on(_onUpdateSystemConfig); on(_onLoadCacheStats); on(_onLoadSystemMetrics); on(_onClearCache); on(_onTestDatabaseConnection); on(_onTestEmailConfiguration); on(_onResetSystemConfig); } Future _onLoadSystemConfig( LoadSystemConfig event, Emitter emit, ) async { emit(SystemSettingsLoading()); try { final config = await _getSettings(); // ✅ Use case emit(SystemConfigLoaded(config)); } catch (e) { if (e is DioException && e.type == DioExceptionType.cancel) return; emit(SystemSettingsError('Erreur de chargement: ${e.toString()}')); } } Future _onUpdateSystemConfig( UpdateSystemConfig event, Emitter emit, ) async { emit(SystemSettingsLoading()); try { final config = await _updateSettings(event.config); // ✅ Use case emit(SystemConfigLoaded(config)); emit(const SystemSettingsSuccess('Configuration mise à jour')); } catch (e) { if (e is DioException && e.type == DioExceptionType.cancel) return; emit(SystemSettingsError('Erreur de mise à jour: ${e.toString()}')); } } Future _onLoadCacheStats( LoadCacheStats event, Emitter emit, ) async { emit(SystemSettingsLoading()); try { final stats = await _getCacheStats(); // ✅ Use case emit(CacheStatsLoaded(stats)); } catch (e) { if (e is DioException && e.type == DioExceptionType.cancel) return; emit(SystemSettingsError('Erreur de chargement: ${e.toString()}')); } } Future _onLoadSystemMetrics( LoadSystemMetrics event, Emitter emit, ) async { emit(SystemSettingsLoading()); try { final metrics = await _repository.getMetrics(); emit(SystemMetricsLoaded(metrics)); } catch (e) { emit(SystemSettingsError('Erreur de chargement des métriques: ${e.toString()}')); } } Future _onClearCache( ClearCache event, Emitter emit, ) async { emit(SystemSettingsLoading()); try { await _clearCache(); // ✅ Use case emit(const SystemSettingsSuccess('Cache vidé avec succès')); } catch (e) { if (e is DioException && e.type == DioExceptionType.cancel) return; emit(SystemSettingsError('Erreur: ${e.toString()}')); } } Future _onTestDatabaseConnection( TestDatabaseConnection event, Emitter emit, ) async { emit(SystemSettingsLoading()); try { final result = await _repository.testDatabase(); final success = result['success'] as bool? ?? false; final message = result['message'] as String? ?? 'Test terminé'; if (success) { emit(SystemSettingsSuccess(message)); } else { emit(SystemSettingsError(message)); } } catch (e) { if (e is DioException && e.type == DioExceptionType.cancel) return; emit(SystemSettingsError('Erreur de test: ${e.toString()}')); } } Future _onTestEmailConfiguration( TestEmailConfiguration event, Emitter emit, ) async { emit(SystemSettingsLoading()); try { final result = await _repository.testEmail(); final success = result['success'] as bool? ?? false; final message = result['message'] as String? ?? 'Test terminé'; if (success) { emit(SystemSettingsSuccess(message)); } else { emit(SystemSettingsError(message)); } } catch (e) { if (e is DioException && e.type == DioExceptionType.cancel) return; emit(SystemSettingsError('Erreur de test: ${e.toString()}')); } } /// Réinitialise la configuration système aux valeurs par défaut Future _onResetSystemConfig( ResetSystemConfig event, Emitter emit, ) async { emit(SystemSettingsLoading()); try { final config = await _resetSettings(); // ✅ Use case emit(SystemConfigLoaded(config)); emit(const SystemSettingsSuccess('Configuration réinitialisée')); } catch (e) { if (e is DioException && e.type == DioExceptionType.cancel) return; emit(SystemSettingsError('Erreur de réinitialisation: ${e.toString()}')); } } }