export type GatewayResult<T> = {
  status: number;
  body: T;
};

const INTERNAL_ERROR_BODY = {
  code: "INTERNAL_ERROR",
  message: "服务暂时不可用，请稍后重试",
  data: null,
} as const;

/**
 * 网关层 5xx 单次重试：首次 5xx 再执行一次，仍 5xx 则返回 503 INTERNAL_ERROR。
 */
export async function executeWithGatewayRetry<T>(
  handler: () => Promise<GatewayResult<T>>,
): Promise<GatewayResult<T | typeof INTERNAL_ERROR_BODY>> {
  const first = await handler();
  if (first.status < 500) {
    return first;
  }

  const second = await handler();
  if (second.status < 500) {
    return second;
  }

  return { status: 503, body: INTERNAL_ERROR_BODY };
}
