import React from 'react'; import { View } from 'react-native'; import { Text } from '../ui/Text'; import { Icon } from '../ui/Icon'; import { Card } from '../ui/Card'; import { StreakInfo } from '../../store/progressStore'; import { useThemeColors } from '~/utils/themeUtils'; interface StreakCardProps { streakInfo: StreakInfo | null; } export const StreakCard: React.FC = ({ streakInfo }) => { const colors = useThemeColors(); if (!streakInfo) { return ( Lernstreak 0 Tage 💤 Starte jetzt deine erste Lernsession! ); } const getStreakEmoji = (streak: number) => { if (streak === 0) return '💤'; if (streak < 3) return '✨'; if (streak < 7) return '🔥'; if (streak < 14) return '💪'; if (streak < 30) return '🚀'; if (streak < 60) return '⭐'; if (streak < 100) return '🏆'; return '👑'; }; const getMotivationalMessage = (streak: number) => { if (streak === 0) return 'Zeit wieder zu lernen!'; if (streak === 1) return 'Guter Start! Bleib dran!'; if (streak < 3) return 'Weiter so! Baue eine Gewohnheit auf!'; if (streak < 7) return 'Fantastisch! Fast eine Woche!'; if (streak < 14) return 'Beeindruckend! Du bist auf Kurs!'; if (streak < 30) return 'Unglaublich! Ein Monat ist in Sicht!'; if (streak < 60) return 'Meisterhaft! Du bist nicht zu stoppen!'; if (streak < 100) return 'Legendär! 100 Tage sind nah!'; return 'Unbesiegbar! Du bist eine Lernmaschine!'; }; const daysSinceLastStudy = streakInfo.last_study_date ? Math.floor((new Date().getTime() - new Date(streakInfo.last_study_date).getTime()) / 86400000) : 999; const isStreakActive = daysSinceLastStudy <= 1; return ( Aktueller Streak {streakInfo.current_streak} {streakInfo.current_streak === 1 ? 'Tag' : 'Tage'} {getMotivationalMessage(streakInfo.current_streak)} {getStreakEmoji(streakInfo.current_streak)} {!isStreakActive && daysSinceLastStudy > 1 && ( {daysSinceLastStudy}d inaktiv )} {/* Stats Row */} {streakInfo.longest_streak} Längster {streakInfo.total_study_days} Gesamt {streakInfo.last_study_date ? new Date(streakInfo.last_study_date).toLocaleDateString('de-DE', { day: 'numeric', month: 'short', }) : '-'} Letztes Mal {/* Progress to next milestone */} {streakInfo.current_streak > 0 && ( Nächster Meilenstein {streakInfo.current_streak < 7 ? `7 Tage (noch ${7 - streakInfo.current_streak})` : streakInfo.current_streak < 30 ? `30 Tage (noch ${30 - streakInfo.current_streak})` : streakInfo.current_streak < 100 ? `100 Tage (noch ${100 - streakInfo.current_streak})` : '365 Tage'} )} ); };