/**
 * Конвертация между локальным временем браузера (поля форм) и UTC ISO,
 * который использует backend (в БД и API — только UTC,
 * конвертация в локальную зону — на клиенте).
 */

function pad2(n: number): string {
  return String(n).padStart(2, '0')
}

/** IANA-таймзона браузера пользователя — для поля `timezone` правила повторения. */
export function browserTimeZone(): string {
  return Intl.DateTimeFormat().resolvedOptions().timeZone
}

/** Локальные дата ("YYYY-MM-DD") и время ("HH:MM") из момента (для прелоада полей формы). */
export function toLocalDateTimeParts(iso: string): { date: string; time: string } {
  const d = new Date(iso)
  return {
    date: `${d.getFullYear()}-${pad2(d.getMonth() + 1)}-${pad2(d.getDate())}`,
    time: `${pad2(d.getHours())}:${pad2(d.getMinutes())}`,
  }
}

/** Собрать UTC ISO-момент из локальной даты ("YYYY-MM-DD") и времени ("HH:MM"). */
export function localDateTimeToIso(date: string, time: string): string {
  return new Date(`${date}T${time}`).toISOString()
}

/** Отформатировать UTC ISO-момент в локальную дату+время для карточек («21 июля, 15:00»). */
export function formatLocalDateTime(iso: string): string {
  const d = new Date(iso)
  const dateLabel = d.toLocaleDateString('ru-RU', { day: 'numeric', month: 'long' })
  const timeLabel = d.toLocaleTimeString('ru-RU', { hour: '2-digit', minute: '2-digit' })
  return `${dateLabel}, ${timeLabel}`
}

/** Отформатировать UTC ISO-момент как локальное время «14:02» (для сообщений чата). */
export function formatLocalTime(iso: string): string {
  return new Date(iso).toLocaleTimeString('ru-RU', { hour: '2-digit', minute: '2-digit' })
}

/** Отформатировать UTC ISO-момент как «вт, 22 июля, 11:00» (для «Ближайшее»). */
export function formatNextOccurrence(iso: string): string {
  const d = new Date(iso)
  const weekday = d.toLocaleDateString('ru-RU', { weekday: 'short' }).replace('.', '')
  const dateLabel = d.toLocaleDateString('ru-RU', { day: 'numeric', month: 'long' })
  const timeLabel = d.toLocaleTimeString('ru-RU', { hour: '2-digit', minute: '2-digit' })
  return `${weekday}, ${dateLabel}, ${timeLabel}`
}
