import axios from 'axios';

/**
 * 统一从任意错误对象中提取可展示的 message。
 * 后端 4xx/5xx 经 axios 拦截器解包后通常是 { message } 普通对象；
 * 网络/超时/取消则是 axios 原生错误。
 */
export function getErrorMessage(error: unknown, fallback = '操作失败'): string {
  let message = '';
  if (axios.isAxiosError(error)) {
    const data = error.response?.data as { message?: unknown } | undefined;
    if (typeof data?.message === 'string' && data.message) message = data.message;
    else if (error.message) message = error.message;
  } else if (error && typeof error === 'object' && 'message' in error) {
    const value = (error as { message?: unknown }).message;
    if (typeof value === 'string' && value) message = value;
  } else if (typeof error === 'string' && error) {
    message = error;
  }
  const trimmed = message.trim();
  if (!trimmed) return fallback;
  const singleLine = trimmed.replace(/[\n\r]+/g, ' ').replace(/ {2,}/g, ' ');
  return singleLine.length > 120 ? singleLine.slice(0, 120) + '\u2026' : singleLine;
}
