type ZodIssue = { path?: (string | number)[]; message?: string };

type ApiErrorBody = {
  message?: string;
  error?: string;
  issues?: ZodIssue[] | { fieldErrors?: Record<string, string[]> };
} | null;

export function formatApiError(data: ApiErrorBody, fallback: string) {
  const base = data?.message ?? data?.error ?? fallback;
  const issues = data?.issues;

  let details: string[] = [];

  if (Array.isArray(issues)) {
    details = issues.map(
      (issue) => `${issue.path?.join(".") || "?"} : ${issue.message ?? "invalide"}`,
    );
  } else if (issues?.fieldErrors) {
    details = Object.entries(issues.fieldErrors).map(
      ([field, messages]) => `${field} : ${messages.join(", ")}`,
    );
  }

  return details.length ? `${base}\n${details.join("\n")}` : base;
}
