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)
      // reload after removing cookie, go to login
      if (!url.includes("self")) {
        location.reload()
      }
    }
    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"),
}
