import { store } from "./index"
import { get as svelteGet } from "svelte/store"
import { removeCookie, Cookies } from "./cookies"

const apiCall = method => async (
  url,
  body,
  headers = { "Content-Type": "application/json" }
) => {
  headers["x-budibase-app-id"] = svelteGet(store).appId
  const json = headers["Content-Type"] === "application/json"
  const resp = await fetch(url, {
    method: method,
    body: json ? JSON.stringify(body) : body,
    headers,
  })
  if (resp.status === 403) {
    removeCookie(Cookies.Auth)
  }
  return resp
}

export const post = apiCall("POST")
export const get = apiCall("GET")
export const patch = apiCall("PATCH")
export const del = apiCall("DELETE")
export const put = apiCall("PUT")

export default {
  post: apiCall("POST"),
  get: apiCall("GET"),
  patch: apiCall("PATCH"),
  delete: apiCall("DELETE"),
  put: apiCall("PUT"),
}