import { join } from 'node:path';

/** スペース id を検証する。UUID 想定だがパス区切り・親参照を含むものは拒否する。 */
function assertSafeId(id: string): void {
  if (!id || id.includes('/') || id.includes('\\') || id.includes('..')) {
    throw new Error(`unsafe space id: ${JSON.stringify(id)}`);
  }
}

/** スペースの設定・知識層（フォルダ）: {dataRoot}/spaces/{id} */
export function spaceDataDir(dataRoot: string, id: string): string {
  assertSafeId(id);
  return join(dataRoot, 'spaces', id);
}

/** スペースの永続ワークスペース: {worktreeDir}/space/{id} */
export function spaceWorkspaceDir(worktreeDir: string, id: string): string {
  assertSafeId(id);
  return join(worktreeDir, 'space', id);
}

/** ファイル窓のルート（フラットツリー）: {worktreeDir}/space/{id}/files */
export function spaceFilesDir(worktreeDir: string, id: string): string {
  return join(spaceWorkspaceDir(worktreeDir, id), 'files');
}

/** append-only ログ: {worktreeDir}/space/{id}/logs */
export function spaceLogsDir(worktreeDir: string, id: string): string {
  return join(spaceWorkspaceDir(worktreeDir, id), 'logs');
}
