// lib/models/notification_model.dart import 'package:wanisdriver/models/users.dart'; // Ensure this import is correct import '../config/enum/action_enum.dart'; import '../config/enum/notification_status_enum.dart'; class NotificationModel { final int? id; final users senderId; // This is now a 'users' object final users receiverId; // This is now a 'users' object final ActionEnum action; final int? actionId; final String subject; final String content; final NotificationStatus status; final DateTime timestmp; NotificationModel({ this.id, required this.senderId, required this.receiverId, required this.action, this.actionId, required this.subject, required this.content, required this.status, required this.timestmp, }); factory NotificationModel.fromJson(Map json) { return NotificationModel( id: json['id'] as int?, // Safely cast to int? senderId: users.fromJson(json['sender'] as Map), receiverId: users.fromJson(json['reciver'] as Map), action: ActionEnumExtension.fromString(json['action']), actionId: json['actionId'] as int?, // Safely cast to int? subject: json['subject'] as String? ?? '', // Provide default empty string content: json['content'] as String? ?? '', // Provide default empty string status: NotificationStatusExtension.fromString(json['status']), timestmp: json['timestmp'] != null ? DateTime.fromMillisecondsSinceEpoch(json['timestmp'] as int) : DateTime.now(), // Correctly parse epoch milliseconds ); } Map toJson() { return { 'id': id, 'sender': senderId.toJson(), // Call toJson on the users object 'reciver': receiverId.toJson(), // Call toJson on the users object 'action': action.value, 'actionId': actionId, 'subject': subject, 'content': content, 'status': status.value, 'timestmp': timestmp.toIso8601String(), }; } /// Creates a copy of this NotificationModel with the given fields updated. NotificationModel copyWith({ int? id, users? senderId, // Type changed to users users? receiverId, // Type changed to users ActionEnum? action, int? actionId, String? subject, String? content, NotificationStatus? status, DateTime? timestmp, }) { return NotificationModel( id: id ?? this.id, senderId: senderId ?? this.senderId, receiverId: receiverId ?? this.receiverId, action: action ?? this.action, actionId: actionId ?? this.actionId, subject: subject ?? this.subject, content: content ?? this.content, status: status ?? this.status, timestmp: timestmp ?? this.timestmp, ); } }