// 日期格式化工具函数

/**
 * 格式化日期为指定格式，默认去掉秒，且三天内显示为今天、昨天、前天
 * @param {string|Date} date - 日期对象或日期字符串
 * @param {string} format - 格式化模板，默认 'YYYY-MM-DD HH:mm'
 * @returns {string} 格式化后的日期字符串
 */
export const formatDate = (date, format = 'YYYY-MM-DD HH:mm') => {
  if (!date) return ''
  
  // 如果是字符串，转换为日期对象
  const dateObj = typeof date === 'string' ? new Date(date) : date
  
  // 检查日期对象是否有效
  if (isNaN(dateObj.getTime())) return ''
  
  // 检查是否在三天内，如果是则返回相对时间
  const relativeTime = getRelativeDay(dateObj)
  if (relativeTime) {
    const hours = String(dateObj.getHours()).padStart(2, '0')
    const minutes = String(dateObj.getMinutes()).padStart(2, '0')
    return `${relativeTime} ${hours}:${minutes}`
  }
  
  const year = dateObj.getFullYear()
  const month = String(dateObj.getMonth() + 1).padStart(2, '0')
  const day = String(dateObj.getDate()).padStart(2, '0')
  const hours = String(dateObj.getHours()).padStart(2, '0')
  const minutes = String(dateObj.getMinutes()).padStart(2, '0')
  
  // 替换模板中的日期部分
  return format
    .replace('YYYY', year)
    .replace('MM', month)
    .replace('DD', day)
    .replace('HH', hours)
    .replace('mm', minutes)
}

/**
 * 获取相对天数（今天、昨天、前天）
 * @param {Date} dateObj - 日期对象
 * @returns {string|null} 相对天数或null
 */
export const getRelativeDay = (dateObj) => {
  const now = new Date()
  const today = new Date(now.getFullYear(), now.getMonth(), now.getDate())
  const targetDate = new Date(dateObj.getFullYear(), dateObj.getMonth(), dateObj.getDate())
  
  // 计算天数差
  const diffTime = today - targetDate
  const diffDays = Math.floor(diffTime / (1000 * 60 * 60 * 24))
  
  if (diffDays === 0) {
    return '今天'
  } else if (diffDays === 1) {
    return '昨天'
  } else if (diffDays === 2) {
    return '前天'
  }
  
  return null
}

/**
 * 计算时间差，返回相对时间
 * @param {string|Date} date - 日期对象或日期字符串
 * @returns {string} 相对时间字符串
 */
export const formatRelativeTime = (date) => {
  if (!date) return ''
  
  const dateObj = typeof date === 'string' ? new Date(date) : date
  const now = new Date()
  const diff = now - dateObj
  
  // 转换为秒
  const seconds = Math.floor(diff / 1000)
  
  if (seconds < 60) {
    return `${seconds}秒前`
  }
  
  // 转换为分钟
  const minutes = Math.floor(seconds / 60)
  if (minutes < 60) {
    return `${minutes}分钟前`
  }
  
  // 转换为小时
  const hours = Math.floor(minutes / 60)
  if (hours < 24) {
    return `${hours}小时前`
  }
  
  // 转换为天
  const days = Math.floor(hours / 24)
  if (days < 30) {
    return `${days}天前`
  }
  
  // 转换为月
  const months = Math.floor(days / 30)
  if (months < 12) {
    return `${months}个月前`
  }
  
  // 转换为年
  const years = Math.floor(months / 12)
  return `${years}年前`
}

/**
 * 获取当前日期
 * @param {string} format - 格式化模板
 * @returns {string} 当前日期字符串
 */
export const getCurrentDate = (format = 'YYYY-MM-DD HH:mm:ss') => {
  return formatDate(new Date(), format)
}