/**
 * Единый разбор и форматирование времени в локальной зоне.
 *
 * Бэкенд (Kotlin `LocalDateTime`) отдаёт время как ISO-строку без зоны
 * (например `"2026-05-29T01:00:00"`) — это настенные часы локальной зоны, в которой
 * работают все сервисы, без UTC-семантики. Браузер по умолчанию трактует такую naive-строку
 * как локальное время — это нам и нужно: разбор, показ и ввод идут в зоне браузера, а
 * сериализация назад отдаёт те же настенные часы naive-строкой без зоны.
 *
 * Строки с явной зоной (`...Z`/офсет, напр. валидность платформ из НСИ) парсятся как
 * абсолютный момент и показываются в локальной зоне.
 */

function pad(n: number): string {
  return String(n).padStart(2, "0");
}

/** Разбирает ISO-строку в эпоху-мс: naive — как локальное время, зонированную — как её момент. */
export function parseLocal(value: string): number {
  return Date.parse(value);
}

/** Дата-время в локальной зоне, формат ru-RU. */
export function formatLocalDateTime(ms: number): string {
  return new Date(ms).toLocaleString("ru-RU", {
    year: "numeric",
    month: "2-digit",
    day: "2-digit",
    hour: "2-digit",
    minute: "2-digit"
  });
}

/** Дата-время с секундами (дд.мм.гггг, чч:мм:сс) — для коротких слотов, где важны секунды. */
export function formatLocalDateTimeSeconds(ms: number): string {
  return new Date(ms).toLocaleString("ru-RU", {
    year: "numeric",
    month: "2-digit",
    day: "2-digit",
    hour: "2-digit",
    minute: "2-digit",
    second: "2-digit"
  });
}

/** Дата (дд.мм) в локальной зоне. */
export function formatLocalDate(ms: number): string {
  return new Date(ms).toLocaleDateString("ru-RU", { day: "2-digit", month: "2-digit" });
}

/** Время (чч:мм) в локальной зоне. */
export function formatLocalTime(ms: number): string {
  return new Date(ms).toLocaleTimeString("ru-RU", { hour: "2-digit", minute: "2-digit" });
}

/** Значение для пикеров (`YYYY-MM-DDTHH:mm`) из локальных компонент. */
export function toLocalInputValue(ms: number): string {
  const d = new Date(ms);
  return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}T${pad(d.getHours())}:${pad(d.getMinutes())}`;
}

/**
 * naive `LocalDateTime` без зоны (`YYYY-MM-DDTHH:mm:ss`) из локальных компонент эпохи-мс.
 * Все бэкенды ожидают `LocalDateTime` без зоны — настенные часы локальной зоны.
 */
export function toLocalIso(ms: number): string {
  const d = new Date(ms);
  return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}T${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`;
}
