import type { HtyErr } from '~/types';
import { HtyErrCode } from '~/types';

/**
 * 根据后端 HtyErr 的 code（errType）映射为前端统一展示的文案。
 * 与 AuthCoreJS response.ts / AuthCore htycommons HtyErrCode 保持一致。
 */
const HTY_ERR_CODE_TO_MESSAGE: Record<HtyErrCode, string> = {
    [HtyErrCode.DbErr]: '数据库错误，请稍后重试',
    [HtyErrCode.InternalErr]: '服务内部错误，请稍后重试',
    [HtyErrCode.CommonError]: '操作失败，请稍后重试',
    [HtyErrCode.WebErr]: '请求异常，请检查网络或稍后重试',
    [HtyErrCode.JwtErr]: '登录已过期，请重新登录',
    [HtyErrCode.WxErr]: '微信接口异常，请稍后重试',
    [HtyErrCode.NullErr]: '数据为空，请刷新后重试',
    [HtyErrCode.NotFoundErr]: '未找到对应数据',
    [HtyErrCode.NotEqualErr]: '数据校验失败，请刷新后重试',
    [HtyErrCode.AuthenticationFailed]: '用户名或密码不正确',
    [HtyErrCode.ConflictErr]: '数据冲突，请刷新后重试',
    [HtyErrCode.TypeErr]: '参数类型错误，请检查后重试',
    [HtyErrCode.DuplicateErr]: '重复操作或数据已存在',
};

const DEFAULT_MESSAGE = '操作失败，请稍后重试';

/**
 * 根据 hty_response 中的 hty_err 生成用户可见的统一错误文案。
 * 优先使用 hty_err.code 映射；无 hty_err 或未映射时使用 fallback。
 */
export function getHtyErrUserMessage(
    htyErr: HtyErr | null | undefined,
    fallback: string = DEFAULT_MESSAGE
): string {
    if (!htyErr || htyErr.code == null || htyErr.code === '') return fallback;
    const code = htyErr.code as HtyErrCode;
    return HTY_ERR_CODE_TO_MESSAGE[code] ?? fallback;
}
