import 'package:freezed_annotation/freezed_annotation.dart'; part 'folder.freezed.dart'; @freezed sealed class Folder with _$Folder { const factory Folder({ required String id, required String name, String? parentId, String? userId, DateTime? createdAt, DateTime? updatedAt, @Default(false) bool isExpanded, @Default([]) List conversationIds, Map? meta, Map? data, Map? items, }) = _Folder; factory Folder.fromJson(Map json) { List extractConversationIds(dynamic source) { if (source is! List) { return const []; } final ids = []; for (final entry in source) { String value = ''; if (entry is String) { value = entry; } else if (entry is Map) { final id = entry['id']; if (id is String) { value = id; } else if (id != null) { value = id.toString(); } } else if (entry != null) { value = entry.toString(); } if (value.isNotEmpty) { ids.add(value); } } return ids; } final items = json['items'] as Map?; final chats = items?['chats']; final explicitIds = extractConversationIds(json['conversation_ids']); final implicitIds = extractConversationIds(chats); final conversationIds = explicitIds.isNotEmpty ? explicitIds : implicitIds; // Handle Unix timestamp conversion DateTime? parseTimestamp(dynamic timestamp) { if (timestamp == null) return null; if (timestamp is int) { return DateTime.fromMillisecondsSinceEpoch(timestamp * 1000); } if (timestamp is String) { return DateTime.parse(timestamp); } return null; } // Create the modified JSON with proper field mapping return Folder( id: json['id'] as String, name: json['name'] as String, parentId: json['parent_id'] as String?, userId: json['user_id'] as String?, createdAt: parseTimestamp(json['created_at']), updatedAt: parseTimestamp(json['updated_at']), isExpanded: json['is_expanded'] as bool? ?? false, conversationIds: conversationIds, meta: json['meta'] as Map?, data: json['data'] as Map?, items: json['items'] as Map?, ); } } extension FolderJsonExtension on Folder { Map toJson() { Map? normalizedItems; if (items != null) { normalizedItems = Map.from(items!); } else if (conversationIds.isNotEmpty) { normalizedItems = {'chats': List.from(conversationIds)}; } return { 'id': id, 'name': name, if (parentId != null) 'parent_id': parentId, if (userId != null) 'user_id': userId, if (createdAt != null) 'created_at': createdAt!.toIso8601String(), if (updatedAt != null) 'updated_at': updatedAt!.toIso8601String(), 'is_expanded': isExpanded, if (normalizedItems != null) 'items': normalizedItems, if (meta != null) 'meta': Map.from(meta!), if (data != null) 'data': Map.from(data!), if (conversationIds.isNotEmpty) 'conversation_ids': List.from(conversationIds), }; } }