// Types de nœuds des arbres. Les handlers de commandes reçoivent un nœud (clic ou menu contextuel) et
// narrowent sur `kind`. Volontairement plats (données + discriminant) ; la hiérarchie parent/enfant est
// tenue par les providers (maps indexées) pour que reveal()/getParent fonctionnent.
import type { GroupSummary, RepoSummary, SessionSummary, WorktreeSummary } from '@arboretum/shared';

export interface RepoNode {
  kind: 'repo';
  repo: RepoSummary;
}
export interface WorktreeNode {
  kind: 'worktree';
  repoId: string;
  worktree: WorktreeSummary;
}
export interface SessionNode {
  kind: 'session';
  session: SessionSummary;
  repoId: string;
  worktreePath: string;
}
export interface GroupNode {
  kind: 'group';
  group: GroupSummary;
}
export interface GroupSessionNode {
  kind: 'group-session';
  session: SessionSummary;
  groupId: string;
}

export type ReposNode = RepoNode | WorktreeNode | SessionNode;
export type GroupsNode = GroupNode | RepoNode | WorktreeNode | SessionNode | GroupSessionNode;
export type AnyNode = ReposNode | GroupsNode;
