import { mkdirSync } from 'node:fs';
import { join } from 'node:path';
import { spaceFilesDir } from './paths.js';
import type { ResolvableSpace } from './folder-resolver.js';

export type WorkspaceMode = 'persistent' | 'ephemeral';

/**
 * タスクの実行先ワークスペースの絶対パスを返す（純関数）。
 * - persistent: スペースの一枚ツリー {worktreeDir}/space/{spaceId}/files（蓄積・共有）
 * - ephemeral:  使い捨て {worktreeDir}/ephemeral/{taskId}（終了後破棄）
 */
export function resolveTaskWorkspaceDir(
  mode: WorkspaceMode,
  space: Pick<ResolvableSpace, 'id'>,
  worktreeDir: string,
  taskId: number,
): string {
  if (mode === 'ephemeral') return join(worktreeDir, 'ephemeral', String(taskId));
  return spaceFilesDir(worktreeDir, space.id);
}

/**
 * input/output/logs/readonly サブディレクトリを冪等に作る。
 * readonly/ はユーザーが「エージェントに編集されたくないファイル」を置く閲覧専用領域
 * （エージェントは Read 可・Write/Edit 不可。core.ts の assertWritable が強制）。
 */
export function ensureWorkspaceDirs(workspacePath: string): void {
  for (const sub of ['input', 'output', 'logs', 'readonly']) {
    mkdirSync(join(workspacePath, sub), { recursive: true });
  }
}
