/// Modèle établissement (laverie). class Establishment { const Establishment({ required this.uuid, required this.name, required this.address, this.city, this.zipCode, this.latitude, this.longitude, this.isActive = true, this.machines = const [], }); final String uuid; final String name; final String address; final String? city; final String? zipCode; final double? latitude; final double? longitude; final bool isActive; final List machines; String get fullAddress { final parts = [address, zipCode, city].where((p) => p != null && p.isNotEmpty); return parts.join(', '); } factory Establishment.fromJson(Map json) { final machinesJson = json['machines'] as List? ?? []; return Establishment( uuid: json['uuid'] as String, name: json['name'] as String, address: json['address'] as String? ?? '', city: json['city'] as String?, zipCode: json['zip_code'] as String?, latitude: (json['latitude'] as num?)?.toDouble(), longitude: (json['longitude'] as num?)?.toDouble(), isActive: json['is_active'] as bool? ?? true, machines: machinesJson .map((m) => Machine.fromJson(m as Map)) .toList(), ); } } /// Modèle machine (lave-linge / sèche-linge). class Machine { const Machine({ required this.uuid, required this.name, required this.type, required this.status, this.qrCode, }); final String uuid; final String name; final String type; final String status; final String? qrCode; bool get isAvailable => status == 'available'; String get typeLabel { switch (type) { case 'washer_small': return 'Lave-linge petit'; case 'washer_large': return 'Lave-linge grand'; case 'dryer_small': return 'Sèche-linge petit'; case 'dryer_large': return 'Sèche-linge grand'; default: return type; } } String get statusLabel { switch (status) { case 'available': return 'Disponible'; case 'reserved': return 'Réservée'; case 'running': return 'En cours'; case 'maintenance': return 'Maintenance'; case 'offline': return 'Hors ligne'; case 'error': return 'Erreur'; default: return status; } } factory Machine.fromJson(Map json) { return Machine( uuid: json['uuid'] as String, name: json['name'] as String, type: json['type'] as String, status: json['status'] as String, qrCode: json['qr_code'] as String?, ); } }