/**
 * 将各种错误对象（尤其是 Convex Client 抛出的长错误）转换为更适合展示给用户的短消息。
 */
export function getUserFacingErrorMessage(err: unknown, fallback: string): string {
  if (!err) return fallback;
  if (typeof err === "string") return err.trim() || fallback;

  const record = typeof err === "object" && err !== null ? (err as Record<string, unknown>) : null;
  const raw = typeof record?.message === "string" ? String(record.message) : "";
  const oneLine = raw.split("\n")[0]?.trim() ?? "";

  // Convex 有时会把服务端堆栈拼进 message 里，形如：
  // "... Server Error Uncaught Error: 未登录 at handler (...)"，这里尽量只取“未登录”。
  const uncaught = raw.match(/Uncaught Error:\s*([^\n]+?)(?:\s+at\s|$)/i);
  if (uncaught?.[1]) return uncaught[1].trim();

  const plainError = raw.match(/Error:\s*([^\n]+?)(?:\s+at\s|$)/i);
  if (plainError?.[1]) return plainError[1].trim();

  if (oneLine) return oneLine;

  return fallback;
}
