import { basename, dirname, join } from "node:path"
import { getOpenCodeConfigDir } from "./opencode-config-dir"
import type { OpenCodeConfigDirOptions } from "./opencode-config-dir-types"

function getParentOpencodeConfigDir(configDir: string): string | null {
  const parentDir = dirname(configDir)
  if (basename(parentDir) !== "profiles") {
    return null
  }

  return dirname(parentDir)
}

export function getOpenCodeCommandDirs(options: OpenCodeConfigDirOptions): string[] {
  const configDir = getOpenCodeConfigDir(options)
  const parentConfigDir = getParentOpencodeConfigDir(configDir)
  return Array.from(
    new Set([
      join(configDir, "commands"),
      join(configDir, "command"),
      ...(parentConfigDir ? [join(parentConfigDir, "commands"), join(parentConfigDir, "command")] : []),
    ])
  )
}

export function getOpenCodeSkillDirs(options: OpenCodeConfigDirOptions): string[] {
  const configDir = getOpenCodeConfigDir(options)
  const parentConfigDir = getParentOpencodeConfigDir(configDir)
  return Array.from(
    new Set([
      join(configDir, "skills"),
      join(configDir, "skill"),
      ...(parentConfigDir ? [join(parentConfigDir, "skills"), join(parentConfigDir, "skill")] : []),
    ])
  )
}
