import { useState } from 'react'; import { Match, api } from '../api/client'; import { getFlagUrl } from '../utils/flagUrl'; import styles from './TipModal.module.css'; interface Props { match: Match; onClose: () => void; onSaved: (matchId: number, home: number, away: number) => void; } type Tendency = 'home' | 'draw' | 'away'; function getTendency(home: number, away: number): Tendency { if (home > away) return 'home'; if (away > home) return 'away'; return 'draw'; } export default function TipModal({ match, onClose, onSaved }: Props) { const existing = match.userTip; const [home, setHome] = useState(existing?.home ?? 0); const [away, setAway] = useState(existing?.away ?? 0); const [saving, setSaving] = useState(false); const [showSuccess, setShowSuccess] = useState(false); const [error, setError] = useState(null); const tendency = getTendency(home, away); const tendencyLabel = tendency === 'home' ? match.homeTeam.shortName || match.homeTeam.name : tendency === 'away' ? match.awayTeam.shortName || match.awayTeam.name : 'Unentschieden'; const tendencyColor = tendency === 'home' ? 'var(--primary)' : tendency === 'away' ? 'var(--cyan)' : 'var(--gold)'; const handleSave = async () => { setSaving(true); setError(null); try { await api.submitTip(match.id, home, away); setShowSuccess(true); if (navigator.vibrate) navigator.vibrate(50); // haptic feedback setTimeout(() => { setShowSuccess(false); onSaved(match.id, home, away); onClose(); }, 1200); } catch (e) { setError((e as Error).message); setSaving(false); } }; return (
e.stopPropagation()}> {/* Drag handle */}
{/* Teams mit Flaggen */}
{match.homeTeam.name ? {match.homeTeam.name} : 🏳️ }
{match.homeTeam.name}
{match.awayTeam.name ? {match.awayTeam.name} : 🏳️ }
{match.awayTeam.name}
{/* Score Picker */}

Dein Tipp

:
{/* Tendenz */}
{tendency === 'draw' ? '🤝' : tendency === 'home' ? '🏠' : '✈️'} Tendenz: {tendencyLabel}
{error &&
{error}
} {showSuccess && (
Dein Tipp ist drin! 🎯
)} {/* CTA */}
); } function ScorePicker({ value, onChange }: { value: number; onChange: (v: number) => void }) { return (
{value}
); }