import moment from 'moment';
import 'moment/locale/zh-cn'; // 导入中文语言包
import 'moment/locale/en-gb'; // 导入英文语言包
import { useTranslation } from 'react-i18next';

/**
 * 语言代码映射表
 * node_modules/moment/locale
 */
const languageMap = {
  'zh-CN': 'zh-cn',
  'en-US': 'en',
  // 添加其他语言映射
};

/**
 * 时间格式映射表,包含不同精度的格式
 */
const formatMap = {
  'zh-CN': {
    full: 'YYYY-MM-DD HH:mm:ss',
    minute: 'YYYY-MM-DD HH:mm',
    hour: 'YYYY-MM-DD HH',
    day: 'YYYY-MM-DD',
  },
  'en-US': {
    full: 'MM/DD/YYYY HH:mm:ss',
    minute: 'MM/DD/YYYY HH:mm',
    hour: 'MM/DD/YYYY HH',
    day: 'MMM D, YYYY',
  },
  // 添加其他语言格式映射
};

/**
 * 检查日期是否有效
 * @param {string|Date} date - 要验证的日期
 * @returns {boolean} - 如果日期有效,则返回 true,否则返回 false
 */
const isValidDate = (date) => {
  return moment(date).isValid();
};

/**
 * 格式化日期
 * @param {string|Date} date - 要格式化的日期
 * @param {string} language - 当前的语言代码
 * @param {string} format - 时间精度类型:'full' | 'minute' | 'hour' | 'day'
 * @returns {string} - 格式化后的日期字符串
 */
const formatDate = (date, language, format = 'full') => {
  if (!isValidDate(date)) {
    console.warn('错误的日期:', date);
    return ''; // 返回空字符串或根据需求返回默认值
  }

  const formats = formatMap[language] || formatMap['zh-CN']; // 如果语言不匹配,默认使用中文格式
  const dateFormat = formats[format] || formats['full']; // 默认使用 'full' 格式

  // 动态设置 moment 的语言
  const momentLocale = languageMap[language] || 'zh-cn'; // 根据映射表获取 moment 支持的语言代码
  moment.locale(momentLocale);

  try {
    return moment(date).format(dateFormat);
  } catch (error) {
    console.error('日期格式化失败:', error);
    return '-'; // 返回空字符串或根据需求返回默认值
  }
};

/**
 * 时间格式化函数,支持根据国际化设置切换格式
 * @param {string|Date} date - 要格式化的日期
 * @param {string} [format='full'] - 时间精度类型:'full' | 'minute' | 'hour' | 'day'
 * @returns {string} - 格式化后的日期字符串
 */
const format = ({ date, format = 'minute' }) => {
  const { i18n } = useTranslation();
  const language = i18n?.language || 'zh-CN'; // 默认使用中文

  const formattedDate = formatDate(date, language, format);

  return formattedDate;
};

export default format;