import { Flame } from 'lucide-react';
import { api } from '@/api';
import { useAsync } from '@/lib/useAsync';
import { ErrorState, LoadingState, Screen, ScreenBody, ScreenHeader } from '@/components/ui';
import { toFa } from '@/lib/format';
import { useAppData } from '@/state/AppData';
import { StreakFlame, flameState } from '@/components/StreakFlame';
const WEEKS = 6;
const WEEKDAYS = ['ش', 'ی', 'د', 'س', 'چ', 'پ', 'ج'];
/** YYYY-MM-DD به وقتِ محلی (سرور روزها را همینطور میدهد). */
const isoDay = (d: Date) =>
`${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`;
/** شش هفتهی اخیر، هفته از شنبه شروع میشود. */
function recentWeeks(today = new Date()): Date[][] {
const end = new Date(today.getFullYear(), today.getMonth(), today.getDate());
const offsetFromSaturday = (end.getDay() + 1) % 7;
const start = new Date(end);
start.setDate(end.getDate() - offsetFromSaturday - (WEEKS - 1) * 7);
return Array.from({ length: WEEKS }, (_, w) =>
Array.from({ length: 7 }, (_, d) => {
const day = new Date(start);
day.setDate(start.getDate() + w * 7 + d);
return day;
}),
);
}
const dayOfMonth = (d: Date) => new Intl.DateTimeFormat('fa-IR-u-ca-persian', { day: 'numeric' }).format(d);
export function StreakScreen() {
const calendar = useAsync(() => api.streakCalendar(), [], { key: 'streak-calendar' });
const { summary } = useAppData();
const flame = flameState(summary?.streak);
const active = new Set(calendar.data?.activeDays ?? []);
const today = isoDay(new Date());
const weeks = recentWeeks();
return (
{today}
}
{reached ? <>