import { SimulationLinkDatum } from 'd3';
import { LucideIcon } from 'lucide-react';

interface D3Node extends d3.SimulationNodeDatum {
    id: string;
    name: string;
    instanceType: string;
    relationshipType?: string;
    isBrowsableNode?: boolean;
    icon?: LucideIcon;
    visible?: boolean;
    washedOut?: boolean;
}

interface D3Link extends SimulationLinkDatum<D3Node> {
    source: string | D3Node;
    target: string | D3Node;
    relationshipType?: string;
}

declare enum RoleFields {
    roleId = "roleId",
    name = "name",
    description = "description",
    createdAt = "createdAt",
    updatedAt = "updatedAt"
}

declare enum UserFields {
    userId = "userId",
    name = "name",
    email = "email",
    relevance = "relevance",
    createdAt = "createdAt",
    updatedAt = "updatedAt"
}

declare enum ContentFields {
    contentId = "contentId",
    name = "name",
    relevance = "relevance",
    authors = "authors",
    createdAt = "createdAt",
    updatedAt = "updatedAt"
}

export { ContentFields as C, type D3Link as D, RoleFields as R, UserFields as U, type D3Node as a };
