import 'package:eatvio_app/features/feed/models/feed_blog_post_model.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; part 'chat_message_model.freezed.dart'; part 'chat_message_model.g.dart'; int _parseAuthorId(dynamic json) { if (json == null) return 0; if (json is num) return json.toInt(); return 0; } DateTime _parseUpdatedAt(dynamic json) { if (json == null) return DateTime.now(); if (json is String) return parseDate(json); return DateTime.now(); } String _parseData(dynamic json) { if (json == null) return ''; return json.toString(); } @freezed abstract class ChatMessageModel with _$ChatMessageModel { const factory ChatMessageModel({ required int id, @JsonKey(name: 'data', fromJson: _parseData) required String data, @JsonKey(name: 'media_data') required List? mediaData, @JsonKey(name: 'urls_media_info') List>? urlsMediaInfo, @JsonKey(name: 'author_id', fromJson: _parseAuthorId) required int authorId, @JsonKey(name: 'updated_at', fromJson: _parseUpdatedAt) required DateTime updatedAt, @JsonKey(name: 'read_by_to_user', defaultValue: false) required bool isRead, @JsonKey(name: 'is_author_message_auth_user') required bool? isCurrentUserAuthor, @JsonKey(name: 'room_id') required String? roomId, @JsonKey(name: 'type', unknownEnumValue: ChatMessageType.unknown) ChatMessageType? type, @Default(MessageState.sent) @JsonKey(includeToJson: false, includeFromJson: false) MessageState messageState, @Default(null) @JsonKey(includeToJson: false, includeFromJson: false) String? uuid, }) = _ChatMessageModel; factory ChatMessageModel.fromJson(Map json) => _$ChatMessageModelFromJson(json); } enum MessageState { loading, sent, error } enum ChatMessageType { @JsonValue('text') text, @JsonValue('system') system, @JsonValue('attachment') attachment, @JsonValue('image') image, @JsonValue('plan_order') planOrder, @JsonValue('video_call_started') videoCallStarted, @JsonValue('video_call_ended') videoCallEnded, @JsonValue('unknown') unknown; }