import 'package:eatvio_app/features/chat/models/chat_message_model.dart'; import 'package:eatvio_app/features/plans/models/chosen_plan_model.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; part 'chat_room_pagination_model.freezed.dart'; part 'chat_room_pagination_model.g.dart'; @freezed abstract class ChatRoomPaginationModel with _$ChatRoomPaginationModel { const factory ChatRoomPaginationModel({ @JsonKey(name: "chatRooms") required ChatRooms chatRooms, @JsonKey(name: "number_of_unread_chat_rooms") required int unreadChatsCount, }) = _ChatRoomPreviewModel; factory ChatRoomPaginationModel.fromJson(Map json) => _$ChatRoomPaginationModelFromJson(json); } @freezed abstract class ChatRooms with _$ChatRooms { const factory ChatRooms({ @JsonKey(name: "data") required List data, @JsonKey(name: "last_page") required int lastPage, @JsonKey(name: "current_page") required int currentPage, }) = _ChatRooms; factory ChatRooms.fromJson(Map json) => _$ChatRoomsFromJson(json); } @freezed abstract class ChatRoom with _$ChatRoom { const factory ChatRoom({ @JsonKey(name: "id") required String id, @JsonKey(name: "room_name") required String roomName, @JsonKey(name: "last_message", fromJson: parseLastMessage) required ChatMessageModel? lastMessage, @JsonKey(name: "users") required Users users, @JsonKey(name: "unread_messages_count") required int unreadMessagesCount, @JsonKey(name: 'chosen_plan', fromJson: parseChosenPlan) required ChosenPlanModel? chosenPlan, }) = _ChatRoom; factory ChatRoom.fromJson(Map json) => _$ChatRoomFromJson(json); } ChatMessageModel? parseLastMessage(dynamic json) { if (json is List) { return null; } return ChatMessageModel.fromJson(json); } @freezed abstract class Users with _$Users { const factory Users({ @JsonKey(name: "from_chat_user") required ChatUser fromChatUser, @JsonKey(name: "to_chat_user") required ChatUser toChatUser, }) = _Users; factory Users.fromJson(Map json) => _$UsersFromJson(json); } @freezed abstract class ChatUser with _$ChatUser { const factory ChatUser({ @JsonKey(name: "id") required int id, @JsonKey(name: "name") required String name, @JsonKey(name: "profile_photo_path") required String? profilePhotoPath, @JsonKey(name: "profile_photo_url") required String profilePhotoUrl, }) = _ChatUser; factory ChatUser.fromJson(Map json) => _$ChatUserFromJson(json); }