/// Immutable domain model for a highlight video entry on the Media screen. /// /// [thumbnailUrl] is nullable so the UI can render a placeholder when no /// thumbnail is available — common while highlights are still being uploaded. class Highlight { const Highlight({ required this.id, required this.title, required this.description, required this.youtubeUrl, required this.publishedAt, this.thumbnailUrl, }); final String id; final String title; final String description; final String youtubeUrl; final String? thumbnailUrl; final DateTime publishedAt; @override bool operator ==(Object other) { if (identical(this, other)) return true; if (other is! Highlight) return false; return other.id == id && other.title == title && other.description == description && other.youtubeUrl == youtubeUrl && other.thumbnailUrl == thumbnailUrl && other.publishedAt == publishedAt; } @override int get hashCode => Object.hash( id, title, description, youtubeUrl, thumbnailUrl, publishedAt, ); @override String toString() => 'Highlight(id: $id, title: $title)'; }