import jsonapi from 'jsonapi-serializer'

export const useApi = () => {
  const { baseUrl, jsonapiPath } = useRuntimeConfig().public

  const apiBaseUrl = `${baseUrl}${jsonapiPath}`
  const headers = {
    'Content-Type': 'application/vnd.api+json'
  }
  const deserializer = new jsonapi.Deserializer({ keyForAttribute: 'camelCase' })

  const deserialize = async (data, mapfun = null, idAttr = null) => {
    const ds = await deserializer.deserialize(data)

    if (!mapfun) mapfun = a => a
    return idmap(ds.map(mapfun), idAttr)
  }

  return {
    baseUrl: baseUrl,
    jsonApiUrl: apiBaseUrl,
    headers,
    deserialize
  }
}

export const idmap = (arr, idattr = 'id') => {
  if (!arr) { return {} }

  return arr.reduce((vse, i) => {
    const id = i[idattr]
    vse[id] = i
    return vse
  }, {})
}
