import { View, Text, TouchableOpacity, Image, StyleSheet } from 'react-native'; interface ArticleCardProps { id: string; title: string; summary: string; thumbnail: string; publishedAt: Date; timeAgo?: string; outletName: string; category: string; onClick: (id: string) => void; className?: string; isAd?: boolean; tags?: string[]; index?: number; } export default function ArticleCard({ id, title, summary, thumbnail, timeAgo, onClick, isAd = false, index = 0, }: ArticleCardProps) { // Generate stable random data based on index and id const hash = id.split('').reduce((acc, char) => acc + char.charCodeAt(0), 0); const baseMinutes = index * 5; const randomOffset = (hash % 5) + 1; const minutesAgo = baseMinutes + randomOffset; return ( onClick(id)} activeOpacity={0.7} > {/* Thumbnail */} {isAd && ( Ad )} {!isAd && ( {timeAgo || `${minutesAgo} min ago`} )} {/* Content */} {title} {summary} ); } const styles = StyleSheet.create({ card: { backgroundColor: '#fff', borderRadius: 12, marginBottom: 12, overflow: 'hidden', shadowColor: '#000', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 0.1, shadowRadius: 4, elevation: 3, }, thumbnailContainer: { width: '100%', aspectRatio: 21 / 9, position: 'relative', }, thumbnail: { width: '100%', height: '100%', }, adBadge: { position: 'absolute', top: 8, left: 8, backgroundColor: '#f59e0b', paddingHorizontal: 8, paddingVertical: 4, borderRadius: 4, }, adText: { color: '#fff', fontSize: 10, fontWeight: '600', }, timeBadge: { position: 'absolute', bottom: 8, left: 8, backgroundColor: 'rgba(0, 0, 0, 0.6)', paddingHorizontal: 8, paddingVertical: 4, borderRadius: 4, }, timeText: { color: '#fff', fontSize: 10, }, content: { padding: 12, }, title: { fontSize: 16, fontWeight: '600', color: '#000', marginBottom: 6, lineHeight: 22, }, summary: { fontSize: 14, color: '#666', lineHeight: 20, }, });