// Dates and numbers in the visitor's admin language.

/** A date-only string (YYYY-MM-DD) is that calendar day here, not UTC midnight. */
export function parseDate(value: string | number): Date {
  if (typeof value === 'string') {
    const day = /^(\d{4})-(\d{2})-(\d{2})$/.exec(value);
    if (day) return new Date(Number(day[1]), Number(day[2]) - 1, Number(day[3]));
  }
  return new Date(value);
}

export function shortDate(iso: string): string {
  const date = parseDate(iso);
  if (Number.isNaN(date.getTime())) return '';
  return date.toLocaleDateString(undefined, { weekday: 'short', day: 'numeric', month: 'short' });
}

export function dayMonth(iso: string): string {
  const date = parseDate(iso);
  if (Number.isNaN(date.getTime())) return '';
  return date.toLocaleDateString(undefined, { day: 'numeric', month: 'short' });
}

export function dateTime(iso: string | number): string {
  const date = typeof iso === 'number' ? new Date(iso * 1000) : new Date(iso);
  if (Number.isNaN(date.getTime())) return '';
  return date.toLocaleString(undefined, { day: 'numeric', month: 'short', hour: '2-digit', minute: '2-digit' });
}

export function weekday(iso: string): string {
  const date = parseDate(iso);
  if (Number.isNaN(date.getTime())) return '';
  return date.toLocaleDateString(undefined, { weekday: 'short' });
}

export function number(value: number): string {
  return value.toLocaleString();
}
