/**
 * 日期格式化工具函数
 * 用于处理各种日期格式转换
 */

/**
 * 格式化日期为数据库格式 YYYY-MM-DD HH:mm:ss
 * @param dateStr 输入的日期字符串，支持多种格式
 * @returns 数据库格式的日期字符串
 */
export const formatDateForDatabase = (dateStr: string): string => {
  if (!dateStr) return ''
  
  let parts: string[] = []
  
  // 处理不同的日期格式
  if (dateStr.includes('/')) {
    // 处理 YYYY/MM/DD 或 YYYY/M/D 格式
    parts = dateStr.split('/')
  } else if (dateStr.includes('-')) {
    // 处理 YYYY-MM-DD 或 YYYY-M-D 格式
    parts = dateStr.split('-')
  } else {
    return dateStr
  }
  
  if (parts.length !== 3) return dateStr
  
  const year = parts[0]
  const month = parts[1].padStart(2, '0')
  const day = parts[2].padStart(2, '0')
  
  return `${year}-${month}-${day} 00:00:00`
}

/**
 * 从数据库格式提取日期部分用于Calendar组件显示
 * @param dateTimeStr 数据库格式的日期时间字符串
 * @returns Calendar组件需要的格式 (YYYY-M-D)
 */
export const extractDateForCalendar = (dateTimeStr: string): string => {
  if (!dateTimeStr) return ''
  
  // 处理不同的输入格式
  let dateStr = ''
  if (dateTimeStr.includes(' ')) {
    // 从 "YYYY-MM-DD HH:mm:ss" 格式中提取日期部分
    dateStr = dateTimeStr.split(' ')[0]
  } else {
    dateStr = dateTimeStr
  }
  
  // 转换为Calendar组件需要的格式 (YYYY-M-D)
  if (dateStr.includes('-')) {
    const parts = dateStr.split('-')
    if (parts.length === 3) {
      const year = parts[0]
      const month = parseInt(parts[1]).toString() // 去掉前导0
      const day = parseInt(parts[2]).toString()   // 去掉前导0
      return `${year}-${month}-${day}`
    }
  }
  
  return dateStr
}

/**
 * 格式化日期为用户友好的显示格式 YYYY-MM-DD
 * @param dateStr 输入的日期字符串
 * @returns 用户友好的日期格式
 */
export const formatDateForDisplay = (dateStr: string): string => {
  if (!dateStr) return ''
  
  // 如果是数据库格式，先提取日期部分
  let dateOnly = dateStr
  if (dateStr.includes(' ')) {
    dateOnly = dateStr.split(' ')[0]
  }
  
  // 如果已经是标准格式，直接返回
  if (/^\d{4}-\d{2}-\d{2}$/.test(dateOnly)) {
    return dateOnly
  }
  
  // 处理其他格式
  let parts: string[] = []
  if (dateOnly.includes('/')) {
    parts = dateOnly.split('/')
  } else if (dateOnly.includes('-')) {
    parts = dateOnly.split('-')
  } else {
    return dateStr
  }
  
  if (parts.length !== 3) return dateStr
  
  const year = parts[0]
  const month = parts[1].padStart(2, '0')
  const day = parts[2].padStart(2, '0')
  
  return `${year}-${month}-${day}`
}

/**
 * 获取当前日期的字符串格式
 * @param format 'database' | 'display' | 'calendar'
 * @returns 格式化的当前日期
 */
export const getCurrentDate = (format: 'database' | 'display' | 'calendar' = 'display'): string => {
  const now = new Date()
  const year = now.getFullYear()
  const month = now.getMonth() + 1
  const day = now.getDate()
  
  switch (format) {
    case 'database':
      return `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')} 00:00:00`
    case 'display':
      return `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')}`
    case 'calendar':
      return `${year}-${month}-${day}`
    default:
      return `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')}`
  }
}
