import 'wash_progress.dart'; /// Modèle lavage (cycle en cours ou terminé). class Wash { const Wash({ required this.uuid, required this.machineUuid, required this.machineName, required this.status, required this.cost, this.startedAt, this.endedAt, this.durationMinutes, this.machineType, this.cycleEndsAt, this.progress, }); final String uuid; final String machineUuid; final String machineName; final String status; final double cost; final DateTime? startedAt; final DateTime? endedAt; final int? durationMinutes; final String? machineType; final DateTime? cycleEndsAt; final WashProgress? progress; WashProgress get liveProgress => WashProgress.compute( startedAt: startedAt, estimatedEndAt: progress?.estimatedEndAt ?? cycleEndsAt, durationMinutes: durationMinutes, machineType: machineType, status: status, ); factory Wash.fromJson(Map json) { final machine = json['machine'] as Map?; final progressJson = json['progress'] as Map?; return Wash( uuid: json['uuid'] as String, machineUuid: machine?['uuid'] as String? ?? json['machine_uuid'] as String? ?? '', machineName: machine?['name'] as String? ?? 'Machine', machineType: machine?['type'] as String?, status: json['status'] as String? ?? 'pending_start', cost: (json['cost'] as num?)?.toDouble() ?? 0, startedAt: json['started_at'] != null ? DateTime.tryParse(json['started_at'] as String) : null, endedAt: json['ended_at'] != null ? DateTime.tryParse(json['ended_at'] as String) : null, durationMinutes: json['duration_minutes'] as int?, cycleEndsAt: machine?['cycle_ends_at'] != null ? DateTime.tryParse(machine!['cycle_ends_at'] as String) : null, progress: progressJson != null ? WashProgress.fromJson(progressJson) : null, ); } }