import fs from 'fs'
import path from 'path'

function uniqueCandidates(candidates) {
  return [...new Set(candidates.filter(Boolean))]
}

function hasServerDataDir(root) {
  const normalizedRoot = String(root || '').replace(/\/+$/, '')
  return fs.existsSync(`${normalizedRoot}/server/data`)
}

export function resolveProjectRoot() {
  const envRoot = process.env.APP_ROOT ? process.env.APP_ROOT.trim() : ''
  const cwd = process.cwd()
  const parent = path.resolve(cwd, '..')

  const candidates = uniqueCandidates([envRoot, cwd, parent])
  for (const root of candidates) {
    if (hasServerDataDir(root)) return root
  }

  return cwd
}

export function getProjectPath(...segments) {
  return path.join(resolveProjectRoot(), ...segments)
}

export function getServerDataPath(...segments) {
  return getProjectPath('server', 'data', ...segments)
}
