/**
 * ワークスペースのトップレベル・ディレクトリの「役割」定義。
 * ファイルタブで各フォルダにバッジを出し、エージェントが書き込める場所と
 * 書き込めない場所（readonly/）を一目で分かるようにする。
 *
 * 単一の真実: バックエンド（core.ts の assertWritable / scaffold の readonly/）と
 * 整合させること。writable:false は readonly/ のみ。
 */
export interface WorkspaceDirRole {
  /** バッジに出す短いラベル。 */
  label: string;
  /** エージェントが書き込めるか。readonly/ だけ false。 */
  writable: boolean;
  /** ホバー時の説明（嘘をつかない）。 */
  title: string;
  /** バッジの Tailwind クラス（背景＋文字色）。 */
  className: string;
}

const ROLES: Record<string, WorkspaceDirRole> = {
  input: {
    label: '入力',
    writable: true,
    title: 'あなたがエージェントに渡すファイルの置き場（読み書き可）',
    className: 'bg-blue-50 text-blue-700 dark:bg-blue-500/15 dark:text-blue-300',
  },
  output: {
    label: '成果物',
    writable: true,
    title: 'エージェントが結果を書き出す場所',
    className: 'bg-green-50 text-green-700 dark:bg-green-500/15 dark:text-green-300',
  },
  logs: {
    label: '作業ログ',
    writable: true,
    title: 'チェックリスト・実行ログなどの作業履歴',
    className: 'bg-slate-100 text-slate-600 dark:bg-slate-500/15 dark:text-slate-300',
  },
  apps: {
    label: 'アプリ',
    writable: true,
    title: 'ワークスペース・アプリの HTML',
    className: 'bg-purple-50 text-purple-700 dark:bg-purple-500/15 dark:text-purple-300',
  },
  readonly: {
    label: '閲覧のみ',
    writable: false,
    title: 'エージェントは書き込めません（ツール層で強制）。編集されたくないファイルの置き場',
    className: 'bg-slate-200 text-slate-600 dark:bg-slate-600/30 dark:text-slate-300',
  },
  source: {
    label: 'ソース',
    writable: true,
    title: '取得した情報源（ソース）の保管場所。エージェントが自動で蓄積します',
    className: 'bg-amber-50 text-amber-700 dark:bg-amber-500/15 dark:text-amber-300',
  },
  skills: {
    label: 'スキル',
    writable: true,
    title: 'エージェントが使うスキルの作業コピー。自動で展開・参照されます',
    className: 'bg-teal-50 text-teal-700 dark:bg-teal-500/15 dark:text-teal-300',
  },
};

/**
 * トップレベル・ディレクトリ entry の役割を返す。該当しなければ null。
 * - ファイル、またはネスト下のディレクトリ（path にスラッシュを含む）は対象外。
 *   役割はワークスペース直下のフォルダにのみ意味がある。
 */
export function workspaceDirRole(
  path: string,
  name: string,
  kind: string,
): WorkspaceDirRole | null {
  if (kind !== 'directory') return null;
  // top-level only: 親セグメントを持たない（例: "input" は対象、"output/input" は対象外）。
  if (path.includes('/')) return null;
  return ROLES[name] ?? null;
}
