import * as fs from 'node:fs/promises';
import * as path from 'node:path';
import * as os from 'node:os';

export interface TestEnv {
  dir: string;
  configDir: string;
  dataDir: string;
  logsDir: string;
  stateDir: string;
  cleanup: () => Promise<void>;
}

export async function createTestEnvironment(): Promise<TestEnv> {
  const dir = await fs.mkdtemp(path.join(os.tmpdir(), 'zyphon-test-'));
  const configDir = path.join(dir, 'config');
  const dataDir = path.join(dir, 'data');
  const logsDir = path.join(dataDir, 'logs');
  const stateDir = path.join(dataDir, 'state');

  await fs.mkdir(configDir, { recursive: true });
  await fs.mkdir(logsDir, { recursive: true });
  await fs.mkdir(stateDir, { recursive: true });

  return {
    dir,
    configDir,
    dataDir,
    logsDir,
    stateDir,
    cleanup: async () => {
      await fs.rm(dir, { recursive: true, force: true });
    },
  };
}

