class ChatMessage { final int messageId; final int taskId; final int senderUserId; final String senderType; // 'customer' or 'worker' final String senderName; final String text; final DateTime createdOn; final bool isRead; const ChatMessage({ required this.messageId, required this.taskId, required this.senderUserId, required this.senderType, required this.senderName, required this.text, required this.createdOn, this.isRead = false, }); factory ChatMessage.fromJson(Map json) { return ChatMessage( messageId: (json["MessageID"] as num?)?.toInt() ?? (json["messageId"] as num?)?.toInt() ?? 0, taskId: (json["TaskID"] as num?)?.toInt() ?? (json["taskId"] as num?)?.toInt() ?? 0, senderUserId: (json["SenderUserID"] as num?)?.toInt() ?? (json["senderUserId"] as num?)?.toInt() ?? 0, senderType: json["SenderType"] as String? ?? json["senderType"] as String? ?? "customer", senderName: json["SenderName"] as String? ?? json["senderName"] as String? ?? "", text: json["Text"] as String? ?? json["MessageText"] as String? ?? json["text"] as String? ?? "", createdOn: DateTime.tryParse( json["CreatedOn"] as String? ?? json["timestamp"] as String? ?? "" ) ?? DateTime.now(), isRead: json["IsRead"] == 1 || json["IsRead"] == true || json["isRead"] == true, ); } Map toJson() { return { "messageId": messageId, "taskId": taskId, "senderUserId": senderUserId, "senderType": senderType, "senderName": senderName, "text": text, "timestamp": createdOn.toIso8601String(), "isRead": isRead, }; } /// Check if this message was sent by the current user bool isMine(String userType) => senderType == userType; }