import 'package:flutter/foundation.dart'; import 'package:em2rp/models/container_model.dart'; import 'package:em2rp/services/data_service.dart'; import 'package:em2rp/services/api_service.dart'; import '../models/equipment_model.dart'; class ContainerProvider extends ChangeNotifier { final DataService _dataService = DataService(FirebaseFunctionsApiService()); List _containers = []; ContainerType? _selectedType; EquipmentStatus? _selectedStatus; String _searchQuery = ''; bool _isLoading = false; // Getters List get containers => _filteredContainers; ContainerType? get selectedType => _selectedType; EquipmentStatus? get selectedStatus => _selectedStatus; String get searchQuery => _searchQuery; bool get isLoading => _isLoading; /// Charger tous les conteneurs via l'API Future loadContainers() async { _isLoading = true; notifyListeners(); try { final containersData = await _dataService.getContainers(); _containers = containersData.map((data) { return ContainerModel.fromMap(data, data['id'] as String); }).toList(); _isLoading = false; notifyListeners(); } catch (e) { print('Error loading containers: $e'); _isLoading = false; notifyListeners(); rethrow; } } /// Obtenir les conteneurs filtrés List get _filteredContainers { var filtered = _containers; if (_selectedType != null) { filtered = filtered.where((c) => c.type == _selectedType).toList(); } if (_selectedStatus != null) { filtered = filtered.where((c) => c.status == _selectedStatus).toList(); } if (_searchQuery.isNotEmpty) { final query = _searchQuery.toLowerCase(); filtered = filtered.where((c) { return c.name.toLowerCase().contains(query) || c.id.toLowerCase().contains(query); }).toList(); } return filtered; } /// Définir le filtre de type void setSelectedType(ContainerType? type) { _selectedType = type; notifyListeners(); } /// Définir le filtre de statut void setSelectedStatus(EquipmentStatus? status) { _selectedStatus = status; notifyListeners(); } /// Définir la requête de recherche void setSearchQuery(String query) { _searchQuery = query; notifyListeners(); } /// Réinitialiser tous les filtres void clearFilters() { _selectedType = null; _selectedStatus = null; _searchQuery = ''; notifyListeners(); } /// Recharger les conteneurs Future refresh() async { await loadContainers(); } /// Obtenir un conteneur par ID ContainerModel? getById(String id) { try { return _containers.firstWhere((c) => c.id == id); } catch (e) { return null; } } }