
import { Cuboid, Notebook, User } from 'lucide-react';
import { type RegisteredNode, type NodeCategory } from './types';

import ServiceConfig from './core/service/config';
import Service from './core/service/node';

import EventConfig from './core/event/config';
import Event from './core/event/node';

import QueryConfig from './core/query/config';
import Query from './core/query/node';

import CommandConfig from './core/command/config';
import Command from './core/command/node';

import NoteConfig from './utility/note/config';
import Note from './utility/note/node';

import TextBoxConfig from './utility/text-box/config';
import TextBox from './utility/text-box/node';

import DomainConfig from './core/domain/config';
import Domain from './core/domain/node';

import ChannelConfig from './core/channel/config';
import Channel from './core/channel/node';

import ExternalSystemConfig from './core/external-system/config';
import ExternalSystem from './core/external-system/node';

import CommentConfig from './utility/comment-thread/config';
import Comment from './utility/comment-thread/node';

import ActorConfig from './flow/actor/config';
import Actor from './flow/actor/node';

import DataConfig from './core/data/config';
import Data from './core/data/node';

import ViewConfig from './core/view/config';
import View from './core/view/node';

export const nodeCategories: NodeCategory[] = [
    {
        type: 'core',
        label: 'Architecture',
        icon: Cuboid,
    },
    {
        type: 'flow',
        label: 'Flow',
        icon: User,
    },
    {
        type: 'utility',
        label: 'Utility',
        icon: Notebook,
    },
]

export const registeredNodeTypes: RegisteredNode[] = [
    {
        type: 'service',
        category: 'core',
        component: Service,
        configuration: ServiceConfig,
    },
    {
        type: 'event',
        category: 'core',
        component: Event,
        configuration: EventConfig,
    },
    {
        type: 'query',
        category: 'core',
        component: Query,
        configuration: QueryConfig,
    },
    {
        type: 'command',
        category: 'core',
        component: Command,
        configuration: CommandConfig,
    },
    {
        type: 'note',
        category: 'utility',
        component: Note,
        configuration: NoteConfig,
    },
    {
        type: 'textBox',
        category: 'utility',
        component: TextBox,
        configuration: TextBoxConfig,
    },
    // {
    //     type: 'domain',
    //     category: 'core',
    //     component: Domain,
    //     configuration: DomainConfig,
    // },
    {
        type: 'channel',
        category: 'core',
        component: Channel,
        configuration: ChannelConfig,
    },
    {
        type: 'comment',
        category: 'utility',
        component: Comment,
        configuration: CommentConfig,
    },
    {
        type: 'actor',
        category: 'flow',
        component: Actor,
        configuration: ActorConfig,
    },
    {
        type: 'external-system',
        category: 'core',
        component: ExternalSystem,
        configuration: ExternalSystemConfig,
    },
    {
        type: 'data',
        category: 'core',
        component: Data,
        configuration: DataConfig,
    },
    {
        type: 'view',
        category: 'core',
        component: View,
        configuration: ViewConfig,
    },

];