// lib/app/models/realtime_monitoring_model.dart class RealtimeMonitoringModel { final String deviceId; final String roomId; final bool servoOpen; final DateTime lastCommand; final String deviceStatus; final double dropRate; final DateTime lastUpdate; final int servoAngleOpen; final int servoAngleClose; RealtimeMonitoringModel({ required this.deviceId, required this.roomId, required this.servoOpen, required this.lastCommand, required this.deviceStatus, required this.dropRate, required this.lastUpdate, this.servoAngleOpen = 90, this.servoAngleClose = 0, }); // From Realtime Database factory RealtimeMonitoringModel.fromRealtimeDB( String deviceId, String roomId, Map data, ) { final controlling = data['controlling'] as Map? ?? {}; final monitoring = data['monitoring'] as Map? ?? {}; final settings = data['settings'] as Map? ?? {}; return RealtimeMonitoringModel( deviceId: deviceId, roomId: roomId, servoOpen: controlling['servo_open'] ?? false, lastCommand: DateTime.parse( controlling['last_command'] ?? DateTime.now().toIso8601String(), ), deviceStatus: monitoring['device_status'] ?? 'disconnected', dropRate: (monitoring['drop_rate'] ?? 0).toDouble(), lastUpdate: DateTime.parse( monitoring['last_update'] ?? DateTime.now().toIso8601String(), ), servoAngleOpen: settings['servo_angle_open'] ?? 90, servoAngleClose: settings['servo_angle_close'] ?? 0, ); } // To Realtime Database Map toRealtimeDB() { return { 'controlling': { 'servo_open': servoOpen, 'last_command': lastCommand.toIso8601String(), }, 'monitoring': { 'device_status': deviceStatus, 'drop_rate': dropRate, 'last_update': lastUpdate.toIso8601String(), }, 'settings': { 'servo_angle_open': servoAngleOpen, 'servo_angle_close': servoAngleClose, }, }; } RealtimeMonitoringModel copyWith({ String? deviceId, String? roomId, bool? servoOpen, DateTime? lastCommand, String? deviceStatus, double? dropRate, DateTime? lastUpdate, int? servoAngleOpen, int? servoAngleClose, }) { return RealtimeMonitoringModel( deviceId: deviceId ?? this.deviceId, roomId: roomId ?? this.roomId, servoOpen: servoOpen ?? this.servoOpen, lastCommand: lastCommand ?? this.lastCommand, deviceStatus: deviceStatus ?? this.deviceStatus, dropRate: dropRate ?? this.dropRate, lastUpdate: lastUpdate ?? this.lastUpdate, servoAngleOpen: servoAngleOpen ?? this.servoAngleOpen, servoAngleClose: servoAngleClose ?? this.servoAngleClose, ); } }