// 格式化相对时间
export function formatRelativeTime(date: string | Date): string {
  const now = new Date();
  const target = new Date(date);
  const diffMs = now.getTime() - target.getTime();
  const diffSeconds = Math.floor(diffMs / 1000);
  const diffMinutes = Math.floor(diffSeconds / 60);
  const diffHours = Math.floor(diffMinutes / 60);
  const diffDays = Math.floor(diffHours / 24);
  const diffMonths = Math.floor(diffDays / 30);
  const diffYears = Math.floor(diffDays / 365);

  if (diffYears > 0) return `${diffYears}年前`;
  if (diffMonths > 0) return `${diffMonths}月前`;
  if (diffDays > 0) return `${diffDays}天前`;
  if (diffHours > 0) return `${diffHours}小时前`;
  if (diffMinutes > 0) return `${diffMinutes}分钟前`;
  return "刚刚";
}

// 格式化时间显示 (mm:ss)
export function formatTime(seconds: number): string {
  const mins = Math.floor(seconds / 60);
  const secs = Math.floor(seconds % 60);
  return `${mins}:${secs.toString().padStart(2, "0")}`;
}

// 处理评论文本中的表情占位符
export function parseCommentText(text: string): (string | { type: "emoji"; name: string })[] {
  const parts: (string | { type: "emoji"; name: string })[] = [];
  const regex = /\[([^\]]+)\]/g;
  let lastIndex = 0;
  let match: RegExpExecArray | null;

  while ((match = regex.exec(text)) !== null) {
    // 添加表情前的文本
    if (match.index > lastIndex) {
      parts.push(text.slice(lastIndex, match.index));
    }
    // 添加表情
    parts.push({ type: "emoji", name: match[1] });
    lastIndex = regex.lastIndex;
  }

  // 添加剩余文本
  if (lastIndex < text.length) {
    parts.push(text.slice(lastIndex));
  }

  return parts;
}

// 从 localStorage 获取数值
export function getNumberFromStorage(key: string, defaultValue: number): number {
  if (typeof window === "undefined") return defaultValue;
  const saved = localStorage.getItem(key);
  if (!saved) return defaultValue;
  const parsed = parseFloat(saved);
  return Number.isNaN(parsed) ? defaultValue : parsed;
}

// 从 localStorage 获取字符串
export function getStringFromStorage(key: string, defaultValue: string): string {
  if (typeof window === "undefined") return defaultValue;
  return localStorage.getItem(key) || defaultValue;
}

// 保存到 localStorage
export function saveToStorage(key: string, value: string | number): void {
  if (typeof window === "undefined") return;
  localStorage.setItem(key, value.toString());
}

// 稳定的绝对时间格式（与 locale 无关），用于避免 SSR/CSR 水合不一致
// 输出示例：2025-10-20 08:23:05 UTC
export function formatAbsoluteUTC(date: string | Date): string {
  const d = new Date(date);
  const Y = d.getUTCFullYear();
  const M = String(d.getUTCMonth() + 1).padStart(2, "0");
  const D = String(d.getUTCDate()).padStart(2, "0");
  const h = String(d.getUTCHours()).padStart(2, "0");
  const m = String(d.getUTCMinutes()).padStart(2, "0");
  const s = String(d.getUTCSeconds()).padStart(2, "0");
  return `${Y}-${M}-${D} ${h}:${m}:${s} UTC`;
}
