import moment from 'moment'

// 设置中文语言包
import 'moment/locale/zh-cn'
moment.locale('zh-cn')

/**
 * 格式化日期时间
 * @param {string|Date} date - 日期对象或日期字符串
 * @param {string} format - 格式化字符串，默认为 'YYYY-MM-DD HH:mm'
 * @returns {string} 格式化后的日期时间字符串
 */
export const formatDateTime = (date, format = 'YYYY-MM-DD HH:mm') => {
  return moment(date).format(format)
}

/**
 * 格式化相对时间（如：5分钟前，2小时前等）
 * @param {string|Date} date - 日期对象或日期字符串
 * @returns {string} 相对时间字符串
 */
export const formatRelativeTime = (date) => {
  return moment(date).fromNow()
}

/**
 * 格式化便签列表时间
 * @param {string|Date} date - 日期对象或日期字符串
 * @returns {string} 格式化后的日期时间字符串
 */
export const formatNoteListDate = (date) => {
  const momentDate = moment(date)
  const now = moment()
  const diffDays = now.diff(momentDate, 'days')
  
  // 今天
  if (diffDays === 0) {
    return momentDate.format('[今天] A h:mm').replace('AM', '上午').replace('PM', '下午')
  }
  
  // 昨天
  if (diffDays === 1) {
    return momentDate.format('[昨天] A h:mm').replace('AM', '上午').replace('PM', '下午')
  }
  
  // 超过两天但小于一周
  if (diffDays > 1 && diffDays < 7) {
    const weekdays = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']
    return momentDate.format(`[${weekdays[momentDate.day()]}] M/D A h:mm`).replace('AM', '上午').replace('PM', '下午')
  }
  
  // 超过一周但小于一年
  if (diffDays >= 7 && diffDays < 365) {
    return momentDate.format(`[${diffDays}天前] M/D A h:mm`).replace('AM', '上午').replace('PM', '下午')
  }
  
  // 超过一年
  return momentDate.format(`[${diffDays}天前] YYYY/M/D A h:mm`).replace('AM', '上午').replace('PM', '下午')
}

/**
 * 格式化便签编辑页时间
 * @param {string|Date} date - 日期对象或日期字符串
 * @returns {string} 格式化后的日期时间字符串
 */
export const formatNoteEditorDate = (date) => {
  const momentDate = moment(date)
  const now = moment()
  const diffDays = now.diff(momentDate, 'days')
  
  // 今天
  if (diffDays === 0) {
    return momentDate.format('[今天] A h:mm').replace('AM', '上午').replace('PM', '下午')
  }
  
  // 昨天
  if (diffDays === 1) {
    return momentDate.format('[昨天] A h:mm').replace('AM', '上午').replace('PM', '下午')
  }
  
  // 超过两天但小于一个月
  if (diffDays > 1 && diffDays < 30) {
    return momentDate.format('M/D A h:mm').replace('AM', '上午').replace('PM', '下午')
  }
  
  // 超过一个月
  return momentDate.format('YYYY/M/D A h:mm').replace('AM', '上午').replace('PM', '下午')
}

/**
 * 获取过去的日期
 * @param {number} amount - 数量
 * @param {string} unit - 单位（days, weeks, months, years等）
 * @returns {string} ISO格式的日期字符串
 */
export const getPastDate = (amount, unit) => {
  return moment().subtract(amount, unit).toISOString()
}

/**
 * 获取当前日期时间
 * @returns {string} ISO格式的日期字符串
 */
export const getCurrentDateTime = () => {
  return moment().toISOString()
}

/**
 * 获取时间戳
 * @returns {number} 时间戳
 */
export const getTimestamp = () => {
  return moment().valueOf()
}

export default {
  formatDateTime,
  formatRelativeTime,
  formatNoteListDate,
  formatNoteEditorDate,
  getPastDate,
  getCurrentDateTime,
  getTimestamp
}