import dayjs from 'dayjs';

/**
 * 格式化时间
 * @param {string|Date|number} date 时间
 * @param {string} format 格式化字符串，默认 'YYYY-MM-DD HH:mm:ss'
 * @returns {string} 格式化后的时间字符串
 */
export function formatTime(date, format = 'YYYY-MM-DD HH:mm:ss') {
  if (!date) return '';
  return dayjs(date).format(format);
}

/**
 * 格式化日期
 * @param {string|Date|number} date 日期
 * @param {string} format 格式化字符串，默认 'YYYY-MM-DD'
 * @returns {string} 格式化后的日期字符串
 */
export function formatDate(date, format = 'YYYY-MM-DD') {
  if (!date) return '';
  return dayjs(date).format(format);
}

/**
 * 相对时间
 * @param {string|Date|number} date 时间
 * @returns {string} 相对时间字符串
 */
export function fromNow(date) {
  if (!date) return '';
  return dayjs(date).fromNow();
}

/**
 * 获取时间戳
 * @param {string|Date} date 时间，不传则返回当前时间戳
 * @returns {number} 时间戳
 */
export function getTimestamp(date) {
  return date ? dayjs(date).valueOf() : dayjs().valueOf();
}

/**
 * 是否是今天
 * @param {string|Date|number} date 时间
 * @returns {boolean} 是否是今天
 */
export function isToday(date) {
  if (!date) return false;
  return dayjs(date).isSame(dayjs(), 'day');
}

/**
 * 是否是本周
 * @param {string|Date|number} date 时间
 * @returns {boolean} 是否是本周
 */
export function isThisWeek(date) {
  if (!date) return false;
  return dayjs(date).isSame(dayjs(), 'week');
}

/**
 * 获取时间范围文本
 * @param {string|Date|number} startDate 开始时间
 * @param {string|Date|number} endDate 结束时间
 * @returns {string} 时间范围文本
 */
export function getDateRange(startDate, endDate) {
  if (!startDate || !endDate) return '';
  const start = formatDate(startDate);
  const end = formatDate(endDate);
  return `${start} ~ ${end}`;
}