import type { Component } from "vue"; import { Archive, Braces, Clock, Columns3, Database, Eye, FileCode, FolderClosed, FolderOpen, Gauge, Key, Link, Link2, ListTree, Network, Package, Plus, ScrollText, Server, ShieldCheck, Table, TableProperties, UsersRound, Zap } from "@lucide/vue"; import type { ColumnInfo, TreeNode } from "@/types/database"; export type TreeNodeIconInfo = { icon: Component; colorClass: string; }; export function getTreeNodeIconInfo(node: TreeNode): TreeNodeIconInfo | null { switch (node.type) { case "schema": return { icon: node.isExpanded ? FolderOpen : FolderClosed, colorClass: "text-amber-500" }; case "connection": case "database": case "mongo-db": return { icon: Database, colorClass: "text-yellow-500" }; case "vector-database": return { icon: Database, colorClass: "text-cyan-500" }; case "linked-server-root": return { icon: Network, colorClass: "text-blue-500" }; case "linked-server": return { icon: Server, colorClass: "text-blue-400" }; case "linked-server-catalog": case "linked-server-schema": case "mq-tenant": return { icon: FolderOpen, colorClass: "text-sky-400" }; case "doris-catalog": return { icon: FolderOpen, colorClass: "text-emerald-500" }; case "nacos-namespace": case "etcd-root": case "mqtt-topic": return { icon: FolderOpen, colorClass: "text-sky-500" }; case "etcd-dashboard": return { icon: Gauge, colorClass: "text-sky-500" }; case "nacos-access-control": case "etcd-access-control": return { icon: ShieldCheck, colorClass: "text-sky-500" }; case "zookeeper-root": case "consul-root": return { icon: Database, colorClass: "text-blue-500" }; case "table": return { icon: Table, colorClass: "text-green-500" }; case "view": return { icon: Eye, colorClass: "text-purple-500" }; case "materialized_view": return { icon: Eye, colorClass: "text-indigo-500" }; case "column": return { icon: Columns3, colorClass: (node.meta as ColumnInfo | undefined)?.is_primary_key ? "text-orange-400" : "text-muted-foreground" }; case "type-attribute": return { icon: Columns3, colorClass: "text-muted-foreground" }; case "type-method": return { icon: Braces, colorClass: "text-amber-500" }; case "type-attributes": return { icon: ListTree, colorClass: "text-green-400" }; case "type-methods": return { icon: Braces, colorClass: "text-amber-500" }; case "group-columns": return { icon: ListTree, colorClass: "text-green-400" }; case "group-indexes": case "index": return { icon: Key, colorClass: "text-amber-500" }; case "group-fkeys": return { icon: Link, colorClass: "text-blue-400" }; case "fkey": return { icon: Link, colorClass: "text-blue-300" }; case "group-triggers": return { icon: Zap, colorClass: "text-orange-400" }; case "trigger": return { icon: Zap, colorClass: "text-orange-300" }; case "group-events": return { icon: Clock, colorClass: "text-orange-400" }; case "event": return { icon: Clock, colorClass: "text-orange-400" }; case "group-constraints": case "constraint": return { icon: Key, colorClass: "text-amber-500" }; case "group-table-partitions": case "group-table-subpartitions": return { icon: node.isExpanded ? FolderOpen : FolderClosed, colorClass: "text-green-400" }; case "partition": case "subpartition": return { icon: TableProperties, colorClass: "text-green-400" }; case "object-browser": return { icon: TableProperties, colorClass: "text-primary" }; case "user-admin": return { icon: UsersRound, colorClass: "text-primary" }; case "dameng-users": return { icon: UsersRound, colorClass: "text-primary" }; case "dameng-roles": return { icon: ShieldCheck, colorClass: "text-primary" }; case "redis-db": return { icon: Database, colorClass: "text-red-400" }; case "mongo-gridfs": case "mongo-buckets": return { icon: Archive, colorClass: "text-cyan-500" }; case "mongo-bucket": return { icon: Archive, colorClass: "text-cyan-400" }; case "mongo-collection": return { icon: Table, colorClass: "text-green-400" }; case "vector-collection": return { icon: TableProperties, colorClass: "text-cyan-400" }; case "elasticsearch-index": return { icon: Table, colorClass: "text-emerald-400" }; case "meilisearch-system": return { icon: Gauge, colorClass: "text-emerald-500" }; case "procedure": return { icon: ScrollText, colorClass: "text-blue-500" }; case "function": return { icon: Braces, colorClass: "text-amber-500" }; case "sequence": return { icon: ListTree, colorClass: "text-emerald-500" }; case "synonym": return { icon: Link2, colorClass: "text-sky-500" }; case "job": return { icon: Clock, colorClass: "text-orange-400" }; case "package": return { icon: Package, colorClass: "text-cyan-500" }; case "package-body": return { icon: FileCode, colorClass: "text-cyan-400" }; case "group-tables": return { icon: Table, colorClass: "text-green-500" }; case "group-dolt-system-tables": return { icon: Table, colorClass: "text-slate-500" }; case "group-views": return { icon: Eye, colorClass: "text-purple-500" }; case "group-materialized-views": return { icon: Eye, colorClass: "text-indigo-500" }; case "group-procedures": return { icon: ScrollText, colorClass: "text-blue-500" }; case "group-functions": return { icon: Braces, colorClass: "text-amber-500" }; case "group-sequences": return { icon: ListTree, colorClass: "text-emerald-500" }; case "group-synonyms": return { icon: Link2, colorClass: "text-sky-500" }; case "group-jobs": return { icon: Clock, colorClass: "text-orange-400" }; case "group-packages": return { icon: Package, colorClass: "text-cyan-500" }; case "group-partitions": return { icon: node.isExpanded ? FolderOpen : FolderClosed, colorClass: "text-green-400" }; case "group-extensions": return { icon: Package, colorClass: "text-violet-500" }; case "extension": return { icon: Package, colorClass: "text-violet-400" }; case "load-more": return { icon: Plus, colorClass: "text-primary" }; default: return { icon: Database, colorClass: "text-muted-foreground" }; } }