/**
 * Чистые помощники ленты ремонтов: группировка по локальной дате (VLA),
 * форматирование сумм и склонения. Вынесены из RepairsFeedPage, чтобы быть
 * переиспользуемыми и покрытыми юнит-тестами (TZ-логика группировки —
 * частый источник off-by-one багов).
 */
import type { FeedItem } from "@/api/repairsFeed";

export interface DayGroup {
  key: string; // YYYY-MM-DD (VLAT)
  items: FeedItem[];
  total: number;
}

/** ISO → дата в Asia/Vladivostok (+10) как YYYY-MM-DD. */
export function toLocalDateKey(iso: string): string {
  const d = new Date(iso);
  const fmt = new Intl.DateTimeFormat("en-CA", {
    timeZone: "Asia/Vladivostok",
    year: "numeric",
    month: "2-digit",
    day: "2-digit",
  });
  return fmt.format(d); // 2026-05-26
}

/** key = YYYY-MM-DD → «26 мая» / «Сегодня» / «Вчера» (относительно VLA-сегодня). */
export function formatDayLabel(key: string, now: Date = new Date()): string {
  const today = toLocalDateKey(now.toISOString());
  if (key === today) return "Сегодня";
  const yest = new Date(now.getTime() - 24 * 3600 * 1000);
  if (key === toLocalDateKey(yest.toISOString())) return "Вчера";
  const [y, m, d] = key.split("-").map(Number);
  const dt = new Date(Date.UTC(y, m - 1, d));
  return new Intl.DateTimeFormat("ru-RU", {
    day: "numeric",
    month: "long",
    timeZone: "UTC",
  }).format(dt);
}

/** Группирует ленту по локальной дате; items уже отсортированы created_at DESC,
 *  поэтому ключи идут от свежих к старым. total — сумма works_total по дню. */
export function groupByLocalDay(items: FeedItem[]): DayGroup[] {
  const map = new Map<string, DayGroup>();
  for (const it of items) {
    const key = toLocalDateKey(it.created_at);
    let g = map.get(key);
    if (!g) {
      g = { key, items: [], total: 0 };
      map.set(key, g);
    }
    g.items.push(it);
    g.total += it.works_total || 0;
  }
  return Array.from(map.values());
}

export function fmtMoney(n: number): string {
  return new Intl.NumberFormat("ru-RU", { maximumFractionDigits: 0 }).format(Math.round(n));
}

/** 1 → «ремонт», 2..4 → «ремонта», 5+/11..14 → «ремонтов». */
export function pluralRepairs(n: number): string {
  const mod10 = n % 10;
  const mod100 = n % 100;
  if (mod100 >= 11 && mod100 <= 14) return "ремонтов";
  if (mod10 === 1) return "ремонт";
  if (mod10 >= 2 && mod10 <= 4) return "ремонта";
  return "ремонтов";
}

/** 1 → «работа», 2..4 → «работы», 5+/11..14 → «работ». */
export function pluralWorks(n: number): string {
  const mod10 = n % 10;
  const mod100 = n % 100;
  if (mod100 >= 11 && mod100 <= 14) return "работ";
  if (mod10 === 1) return "работа";
  if (mod10 >= 2 && mod10 <= 4) return "работы";
  return "работ";
}
