/**
 * Options to control cache behavior when retrieving or storing data.
 *
 * - "cache-first": Default behaviour, check if the needed data is available in the cache first. If the data is found, it is returned immediately. Otherwise, the data is fetched and then cached.
 * - "fetch-then-cache": Always fetch the data first, and then update the cache with the freshly fetched data.
 */
export type CacheStrategy = "cache-first" | "fetch-then-cache"
export type CacheOrGetOptions = {
  cacheStrategy?: CacheStrategy
  includeGitHashInKey?: boolean
}

export function defaultCacheOrGetOptions(
  opts: CacheOrGetOptions = {}
): CacheOrGetOptions {
  return {
    cacheStrategy: "cache-first",
    ...opts,
  }
}

export function shouldGetFromCache(
  opts: CacheOrGetOptions | undefined
): boolean {
  opts = defaultCacheOrGetOptions(opts)

  return opts.cacheStrategy === "cache-first"
}
