import { existsSync, rmSync } from "node:fs";
import { resolve } from "node:path";

export interface ResetDevCacheOptions {
  rootDir?: string;
  cacheDir?: string;
  enabled?: boolean;
}

export function resetDevCache(options: ResetDevCacheOptions = {}): string {
  const rootDir = resolve(options.rootDir ?? process.cwd());

  const cacheDir = resolve(rootDir, options.cacheDir ?? ".wrnexus");

  if (options.enabled === false) {
    return cacheDir;
  }

  // Safety: never allow deleting the project root.
  if (cacheDir === rootDir) {
    throw new Error("Refusing to remove the project root as the WRNexus cache directory.");
  }

  if (existsSync(cacheDir)) {
    rmSync(cacheDir, {
      recursive: true,
      force: true,
      maxRetries: 3,
      retryDelay: 100,
    });

    console.log(`[wrnexus] cleared generated cache: ${cacheDir}`);
  }

  return cacheDir;
}
