/** * Prediction Card DTO * * Typed data structure for rendering match prediction cards * and generating social media captions. */ export interface TopPick { /** Market name in Turkish, e.g. "Üst 2.5 Gol" */ market: string; /** Market name in English, e.g. "Over 2.5" */ marketEn: string; /** Pick label, e.g. "Üst" */ pick: string; /** Confidence 0-100 */ confidence: number; /** Odds value */ odds: number; } export interface PredictionCardDto { // ─── Match Info ─── matchId: string; homeTeam: string; awayTeam: string; homeLogo: string; awayLogo: string; leagueName: string; leagueLogo?: string; /** Formatted date, e.g. "01 Mar 2026 - 21:00" */ matchDate: string; // ─── Score Predictions ─── /** HT score, e.g. "1-0" */ htScore: string; /** FT score, e.g. "2-1" */ ftScore: string; /** Overall confidence 0-100 */ scoreConfidence: number; // ─── Top 3 Best Bets ─── topPicks: TopPick[]; // ─── Risk ─── riskLevel: 'LOW' | 'MEDIUM' | 'HIGH' | 'EXTREME'; // ─── Raw prediction JSON (for Gemini caption) ─── rawPrediction?: Record; } export interface SocialPostResult { matchId: string; imagePath: string; caption: string; twitterPostId?: string; facebookPostId?: string; instagramPostId?: string; postedAt: Date; errors?: string[]; }