import '../core/utils/safe_convert.dart'; class AnnouncementItem { final int id; final String title; final String name; final String date; final String datePublished; final String? expiryDate; final String summary; final String content; final String type; final String priority; final String? author; final bool hasAttachment; final String? circularFilename; const AnnouncementItem({ required this.id, required this.title, required this.name, required this.date, required this.datePublished, this.expiryDate, required this.summary, required this.content, required this.type, required this.priority, this.author, required this.hasAttachment, this.circularFilename, }); factory AnnouncementItem.fromJson(Map json) { final title = SafeConvert.toSafeString( json['title'], SafeConvert.toSafeString(json['name'], 'Announcement'), ); final datePublished = SafeConvert.toSafeString( json['date_published'], SafeConvert.toSafeString(json['date']), ); return AnnouncementItem( id: SafeConvert.toSafeInt(json['id']), title: title, name: title, date: datePublished, datePublished: datePublished, expiryDate: SafeConvert.toNullableString(json['expiry_date']), summary: SafeConvert.toSafeString(json['summary']), content: SafeConvert.toSafeString(json['content']), type: SafeConvert.toSafeString(json['type'], 'notice'), priority: SafeConvert.toSafeString(json['priority'], '0'), author: SafeConvert.toNullableString(json['author']), hasAttachment: json['has_attachment'] == true, circularFilename: SafeConvert.toNullableString(json['circular_filename']), ); } bool get isUrgent => priority == '2'; bool get isImportant => priority == '1'; String get priorityLabel { switch (priority) { case '2': return 'Urgent'; case '1': return 'Important'; case '0': default: return 'Normal'; } } String get typeLabel { switch (type) { case 'circular': return 'Circular'; case 'event': return 'Event'; case 'notice': default: return 'Notice'; } } }