/**
 * Форматы времени для ленты ремонтов PWA (У39).
 *
 * Гибрид «Сегодня в 14:32 / Вчера в 18:00 / 23 мая, 14:32 /
 * 23 мая 2025, 14:32» — для рабочего инструмента нужно точное время,
 * а не относительное «2 часа назад».
 *
 * В детальной карточке ремонта используется всегда полный формат
 * (см. `formatFullDateTime`).
 */

const HHMM = new Intl.DateTimeFormat("ru-RU", {
  hour: "2-digit",
  minute: "2-digit",
  hour12: false,
});

const DAY_MONTH = new Intl.DateTimeFormat("ru-RU", {
  day: "numeric",
  month: "long",
});

const DAY_MONTH_YEAR = new Intl.DateTimeFormat("ru-RU", {
  day: "numeric",
  month: "long",
  year: "numeric",
});

function startOfDay(d: Date): Date {
  return new Date(d.getFullYear(), d.getMonth(), d.getDate());
}

/** У39: формат строки ленты. */
export function formatFeedTimestamp(input: string | Date, now: Date = new Date()): string {
  const dt = typeof input === "string" ? new Date(input) : input;
  if (Number.isNaN(dt.getTime())) return String(input);

  const todayStart = startOfDay(now);
  const yesterdayStart = new Date(todayStart);
  yesterdayStart.setDate(yesterdayStart.getDate() - 1);

  if (dt >= todayStart) {
    return `Сегодня в ${HHMM.format(dt)}`;
  }
  if (dt >= yesterdayStart) {
    return `Вчера в ${HHMM.format(dt)}`;
  }
  if (dt.getFullYear() === now.getFullYear()) {
    return `${DAY_MONTH.format(dt)}, ${HHMM.format(dt)}`;
  }
  return `${DAY_MONTH_YEAR.format(dt)}, ${HHMM.format(dt)}`;
}

/** Полный формат для детальной карточки. */
export function formatFullDateTime(input: string | Date): string {
  const dt = typeof input === "string" ? new Date(input) : input;
  if (Number.isNaN(dt.getTime())) return String(input);
  return `${DAY_MONTH_YEAR.format(dt)}, ${HHMM.format(dt)}`;
}
