import { BASE_URL } from "./consts";

export const api = async (url: string, options?: RequestInit) => {
  const res = await fetch(BASE_URL + "/api" + url, options);
  if (!res.ok) {
    const body = await res.text().catch(() => null);
    throw new APIError(body || res.statusText, res.status);
  }

  const contentType = res.headers.get("content-type");
  if (contentType?.includes("application/json")) {
    return res.json();
  }

  return res.text();
};

export class APIError extends Error {
  code: number;

  constructor(message: string, statusCode?: number) {
    super(message);
    this.code = typeof statusCode === "number" ? statusCode : 400;
  }
}