import moment from 'moment-timezone'

export function formatDateToICal(
  date: Date,
  allday: boolean,
  timezone?: string
) {
  const pad = (n: number) => n.toString().padStart(2, '0')

  if (allday) {
    const year = date.getUTCFullYear()
    const month = pad(date.getUTCMonth() + 1)
    const day = pad(date.getUTCDate())
    return `${year}-${month}-${day}`
  }

  if (timezone) {
    if (!moment.tz.zone(timezone)) {
      console.warn(
        `[formatDateToICal] Unrecognized timezone: "${timezone}", falling back to UTC`
      )
    } else {
      const momentDate = moment.utc(date).tz(timezone)
      if (momentDate.isValid()) {
        return momentDate.format('YYYY-MM-DDTHH:mm:ss')
      }
    }
  }

  const year = date.getUTCFullYear()
  const month = pad(date.getUTCMonth() + 1)
  const day = pad(date.getUTCDate())
  const hours = pad(date.getUTCHours())
  const minutes = pad(date.getUTCMinutes())
  const seconds = pad(date.getUTCSeconds())
  return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}Z`
}
