import { toFaDigits } from '@/utils/persian' import { toJalaali } from '@/utils/date-utils' const WEEKDAY_NAMES = ['شنبه', 'یکشنبه', 'دوشنبه', 'سه شنبه', 'چهارشنبه', 'پنجشنبه', 'جمعه'] const MONTH_NAMES = [ 'فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور', 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند', ] const GREGORIAN_WEEKDAYS = ['Sat', 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri'] const DAY_MS = 24 * 60 * 60 * 1000 /** * Builds the current Jalaali week (Saturday → Friday) anchored to the Asia/Tehran * timezone, independent of the viewer's local clock. The day matching Tehran's * "today" is flagged `selected`. Returns `{ month, days }` for DashboardCalendar. */ export const useTehranCalendar = () => { const parts = new Intl.DateTimeFormat('en-US', { timeZone: 'Asia/Tehran', year: 'numeric', month: 'numeric', day: 'numeric', weekday: 'short', }).formatToParts(new Date()) const part = (type) => parts.find((p) => p.type === type)?.value const todayIndex = GREGORIAN_WEEKDAYS.indexOf(part('weekday')) const todayUtc = Date.UTC(Number(part('year')), Number(part('month')) - 1, Number(part('day'))) const weekStartUtc = todayUtc - todayIndex * DAY_MS const today = new Date(todayUtc) const { jm } = toJalaali(today.getUTCFullYear(), today.getUTCMonth() + 1, today.getUTCDate()) const days = WEEKDAY_NAMES.map((weekday, i) => { const date = new Date(weekStartUtc + i * DAY_MS) const { jd } = toJalaali(date.getUTCFullYear(), date.getUTCMonth() + 1, date.getUTCDate()) return { weekday, day: toFaDigits(jd), selected: i === todayIndex } }) return { month: `${MONTH_NAMES[jm - 1]} ماه`, days } }