// Helpers for parsing backend datetimes and computing week grids.

// Backend stores start_time / end_time as strings like "2026-08-10 19:00"
// (sometimes ISO "2026-08-10T19:00"). Parse both robustly as local time.
export function parseDateTime(value: string): Date {
  if (!value) return new Date(NaN)
  const normalized = value.trim().replace(" ", "T")
  const d = new Date(normalized)
  return d
}

export function startOfWeek(date: Date): Date {
  const d = new Date(date)
  d.setHours(0, 0, 0, 0)
  const day = d.getDay() // 0 = Sunday
  d.setDate(d.getDate() - day)
  return d
}

export function addDays(date: Date, days: number): Date {
  const d = new Date(date)
  d.setDate(d.getDate() + days)
  return d
}

export function isSameDay(a: Date, b: Date): boolean {
  return (
    a.getFullYear() === b.getFullYear() &&
    a.getMonth() === b.getMonth() &&
    a.getDate() === b.getDate()
  )
}

export function toDateParam(date: Date): string {
  const y = date.getFullYear()
  const m = String(date.getMonth() + 1).padStart(2, "0")
  const d = String(date.getDate()).padStart(2, "0")
  return `${y}-${m}-${d}`
}

// Format a Date into the "YYYY-MM-DD HH:MM" string the backend expects.
export function toBackendDateTime(date: Date): string {
  const y = date.getFullYear()
  const mo = String(date.getMonth() + 1).padStart(2, "0")
  const d = String(date.getDate()).padStart(2, "0")
  const h = String(date.getHours()).padStart(2, "0")
  const mi = String(date.getMinutes()).padStart(2, "0")
  return `${y}-${mo}-${d} ${h}:${mi}`
}

// For <input type="datetime-local"> values ("YYYY-MM-DDTHH:MM").
export function toInputDateTime(date: Date): string {
  return toBackendDateTime(date).replace(" ", "T")
}

export function formatTime(date: Date): string {
  if (isNaN(date.getTime())) return "--:--"
  return date.toLocaleTimeString([], { hour: "2-digit", minute: "2-digit", hour12: false })
}

export function formatDayLabel(date: Date): string {
  return date.toLocaleDateString([], { weekday: "long", month: "long", day: "numeric" })
}

export function formatMonthYear(date: Date): string {
  return date.toLocaleDateString([], { month: "long", year: "numeric" })
}

export const WEEKDAY_LABELS = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"]
