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) { // Extract conversation IDs from items.chats if available final items = json['items'] as Map?; final chats = items?['chats'] as List?; // Handle both string IDs and conversation objects final conversationIds = chats?.map((chat) { if (chat is String) { return chat; } else if (chat is Map) { return chat['id'] as String? ?? ''; } return ''; }).where((id) => id.isNotEmpty).toList().cast() ?? []; // 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?, ); } }