import { dirname, join } from 'node:path';

export interface ResolvableSpace {
  kind: 'personal' | 'case';
  id: string;
  ownerId: string | null;
}

export interface FolderContext {
  /** userPiecesDir/userMemoryDir/readUserAgentsMd の第1引数に渡すルート */
  rootDir: string;
  /** 同関数群の第2引数（ユーザーフォルダの ownerId 位置）に渡す葉キー */
  leafId: string;
}

/** 案件スペースのフォルダ親ルート。userFolderRoot(data/users) の兄弟 data/spaces。 */
export function spacesFolderRoot(userFolderRoot: string): string {
  return join(dirname(userFolderRoot), 'spaces');
}

/**
 * スペースのフォルダ解決（spec §2.2 §5.4）。`{ rootDir, leafId }` を返し、
 * 既存の userPiecesDir(rootDir, leafId) / readUserAgentsMd(rootDir, leafId) 等に
 * そのまま渡せる形にする。
 * - personal: 既存ユーザーフォルダ data/users/{ownerId} を指す（物理移動なし、spec §7）
 * - case:     data/spaces/{spaceId}
 */
export function resolveSpaceFolder(space: ResolvableSpace, userFolderRoot: string): FolderContext {
  if (space.kind === 'personal') {
    return { rootDir: userFolderRoot, leafId: space.ownerId ?? 'local' };
  }
  return { rootDir: spacesFolderRoot(userFolderRoot), leafId: space.id };
}
