import 'package:flutter/foundation.dart'; import 'package:em2rp/models/maintenance_model.dart'; import 'package:em2rp/services/maintenance_service.dart'; import 'package:em2rp/utils/debug_log.dart'; class MaintenanceProvider extends ChangeNotifier { final MaintenanceService _service = MaintenanceService(); List _maintenances = []; bool _isLoading = false; // Getters List get maintenances => _maintenances; bool get isLoading => _isLoading; /// Charger toutes les maintenances Future loadMaintenances({String? equipmentId}) async { _isLoading = true; notifyListeners(); try { if (equipmentId != null) { _maintenances = await _service.getMaintenancesByEquipment(equipmentId); } else { _maintenances = await _service.getAllMaintenances(); } _isLoading = false; notifyListeners(); } catch (e) { DebugLog.error('[MaintenanceProvider] Error loading maintenances', e); _isLoading = false; notifyListeners(); rethrow; } } /// Récupérer les maintenances pour un équipement spécifique Future> getMaintenances(String equipmentId) async { return await _service.getMaintenancesByEquipment(equipmentId); } /// Récupérer toutes les maintenances Future> getAllMaintenances() async { return await _service.getAllMaintenances(); } /// Créer une nouvelle maintenance Future createMaintenance(MaintenanceModel maintenance) async { try { await _service.createMaintenance(maintenance); await loadMaintenances(); // Recharger après création } catch (e) { DebugLog.error('[MaintenanceProvider] Error creating maintenance', e); rethrow; } } /// Mettre à jour une maintenance Future updateMaintenance(String id, Map data) async { try { await _service.updateMaintenance(id, data); await loadMaintenances(); // Recharger après mise à jour } catch (e) { DebugLog.error('[MaintenanceProvider] Error updating maintenance', e); rethrow; } } /// Supprimer une maintenance Future deleteMaintenance(String id) async { try { await _service.deleteMaintenance(id); await loadMaintenances(); // Recharger après suppression } catch (e) { DebugLog.error('[MaintenanceProvider] Error deleting maintenance', e); rethrow; } } /// Récupérer une maintenance par ID Future getMaintenanceById(String id) async { try { return await _service.getMaintenanceById(id); } catch (e) { DebugLog.error('[MaintenanceProvider] Error getting maintenance', e); rethrow; } } /// Marquer une maintenance comme complétée Future completeMaintenance( String id, { String? performedBy, double? cost, }) async { try { await _service.completeMaintenance(id, performedBy: performedBy, cost: cost); await loadMaintenances(); // Recharger après complétion } catch (e) { DebugLog.error('[MaintenanceProvider] Error completing maintenance', e); rethrow; } } /// Vérifier les maintenances à venir Future checkUpcomingMaintenances() async { try { await _service.checkUpcomingMaintenances(); } catch (e) { DebugLog.error('[MaintenanceProvider] Error checking upcoming maintenances', e); rethrow; } } /// Récupérer les maintenances en retard List get overdueMaintenances { return _maintenances.where((m) => m.isOverdue).toList(); } /// Récupérer les maintenances complétées List get completedMaintenances { return _maintenances.where((m) => m.isCompleted).toList(); } /// Récupérer les maintenances à venir List get upcomingMaintenances { return _maintenances.where((m) => !m.isCompleted && !m.isOverdue).toList(); } /// Obtenir les maintenances pour un équipement spécifique (depuis le cache local) List getForEquipment(String equipmentId) { return _maintenances.where((m) => m.equipmentIds.contains(equipmentId) ).toList(); } }