import { join } from "node:path";

export interface StoreLayout {
  readonly root: string;
  config(): string;
  configFile(name: string): string;
  contractsDir(): string;
  contract(fileName: string): string;
  decisionsDir(): string;
  decision(fileName: string): string;
  baseline(): string;
  baselineFile(name: string): string;
  runsDir(): string;
  run(runId: string): string;
  reportsDir(): string;
  report(reportId: string): string;
  fixPacketsDir(): string;
  fixPacket(fileName: string): string;
  generation(): string;
  lock(): string;
  conflictsDir(): string;
}

export function storeLayout(root: string): StoreLayout {
  return {
    root,
    config: () => join(root, "config"),
    configFile: (name) => join(root, "config", name),
    contractsDir: () => join(root, "contracts"),
    contract: (fileName) => join(root, "contracts", fileName),
    decisionsDir: () => join(root, "decisions"),
    decision: (fileName) => join(root, "decisions", fileName),
    baseline: () => join(root, "baseline"),
    baselineFile: (name) => join(root, "baseline", name),
    runsDir: () => join(root, "runs"),
    run: (runId) => join(root, "runs", runId),
    reportsDir: () => join(root, "reports"),
    report: (reportId) => join(root, "reports", reportId),
    fixPacketsDir: () => join(root, "fix-packets"),
    fixPacket: (fileName) => join(root, "fix-packets", fileName),
    generation: () => join(root, "generation.json"),
    lock: () => join(root, ".store.lock"),
    conflictsDir: () => join(root, "conflicts"),
  };
}
