import 'package:em2rp/models/container_model.dart';
import 'package:em2rp/services/data_service.dart';
import 'package:em2rp/services/api_service.dart';

/// Service pour gérer la relation entre containers et équipements
/// Utilise le principe : seul le container stocke la référence aux équipements
class ContainerEquipmentService {
  final DataService _dataService = DataService(apiService);

  /// Récupère tous les containers contenant un équipement spécifique
  /// Utilise une Cloud Function avec authentification et permissions
  Future<List<ContainerModel>> getContainersByEquipment(String equipmentId) async {
    try {
      final containersData = await _dataService.getContainersByEquipment(equipmentId);

      return containersData.map((data) {
        // L'ID est dans le champ 'id' retourné par la fonction
        final id = data['id'] as String;
        return ContainerModel.fromMap(data, id);
      }).toList();
    } catch (e) {
      print('[ContainerEquipmentService] Error getting containers for equipment $equipmentId: $e');
      rethrow;
    }
  }

  /// Vérifie si un équipement est dans au moins un container
  Future<bool> isEquipmentInAnyContainer(String equipmentId) async {
    try {
      final containers = await getContainersByEquipment(equipmentId);
      return containers.isNotEmpty;
    } catch (e) {
      print('[ContainerEquipmentService] Error checking if equipment is in container: $e');
      return false;
    }
  }

  /// Récupère le nombre de containers contenant un équipement
  Future<int> getContainerCountForEquipment(String equipmentId) async {
    try {
      final containers = await getContainersByEquipment(equipmentId);
      return containers.length;
    } catch (e) {
      print('[ContainerEquipmentService] Error getting container count: $e');
      return 0;
    }
  }
}

/// Instance globale singleton
final containerEquipmentService = ContainerEquipmentService();

