import { env } from "@/env/server"

import { getBranchPrefix } from "./getBranchPrefix"

export function getPrefix(options: {
  includeGitHashInKey: boolean
  includeBranchPrefix: boolean
}): string {
  const prefixTokens = []

  const includeGitHashInKey = options.includeGitHashInKey
  const includeBranchPrefix = options.includeBranchPrefix

  if (process.env.NODE_ENV === "development") {
    const devPrefix = process.env.USER || process.env.USERNAME || "dev"
    return `${devPrefix}`
  }

  if (includeGitHashInKey) {
    const gitSha = env.GIT_SHA?.trim().substring(0, 7)

    if (!gitSha) {
      throw new Error("Unable to getPrefix, GIT_SHA must be set")
    }

    prefixTokens.push(gitSha)
  }

  if (includeBranchPrefix) {
    const branch = env.BRANCH?.trim()

    if (!branch) {
      throw new Error("Unable to getPrefix, BRANCH must be set")
    }
    const branchPrefix = getBranchPrefix(branch)
    if (branchPrefix) {
      prefixTokens.push(branchPrefix)
    }
  }

  return prefixTokens.join(":")
}
