// SPDX-FileCopyrightText: Amolith <amolith@secluded.site>
//
// SPDX-License-Identifier: GPL-3.0-or-later

import { mkdtemp, rm, chmod } from "node:fs/promises";
import { tmpdir } from "node:os";
import { join } from "node:path";
import { WorkspaceError } from "../util/errors.js";

export interface Workspace {
  path: string;
  cleanup: () => Promise<void>;
}

export interface WorkspaceOptions {
  cleanup: boolean;
}

export async function createWorkspace(options: WorkspaceOptions): Promise<Workspace> {
  try {
    const root = await mkdtemp(join(tmpdir(), "rumilo-"));
    await chmod(root, 0o700);

    const cleanup = async () => {
      if (!options.cleanup) return;
      await rm(root, { recursive: true, force: true });
    };

    return { path: root, cleanup };
  } catch (error) {
    throw new WorkspaceError(`Failed to create workspace: ${String(error)}`);
  }
}
