type DateInput = string | number | Date | null | undefined

export function formatDateTime(value: DateInput, fallback = '-') {
  if (!value) return fallback
  const date = value instanceof Date ? value : new Date(value)
  if (Number.isNaN(date.getTime())) {
    return typeof value === 'string' && value.trim() ? value.replace('T', ' ') : fallback
  }
  return (
    [date.getFullYear(), pad(date.getMonth() + 1), pad(date.getDate())].join('-') +
    ` ${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())}`
  )
}

export function formatDateMinute(value: DateInput, fallback = '-') {
  const formatted = formatDateTime(value, fallback)
  return formatted === fallback ? fallback : formatted.slice(0, 16)
}

// formatInputDate 按本地时区输出 YYYY-MM-DD,供日期选择器 value-format 使用。
// 不能用 toISOString().slice(0,10),那是 UTC 日期,东八区凌晨 0-8 点会偏成前一天。
export function formatInputDate(value: Date = new Date()) {
  return [value.getFullYear(), pad(value.getMonth() + 1), pad(value.getDate())].join('-')
}

function pad(value: number) {
  return String(value).padStart(2, '0')
}
