import React from 'react';
import { NodeEditorProps } from './index';
import { Form, Input } from '@arco-design/web-react';
import SwitchEditor from './components/SwitchEditor';
import AndEditor from './components/AndEditor';
import OrEditor from './components/OrEditor';
import WaitEditor from './components/WaitEditor';
import LoopEditor from './components/LoopEditor';
import CycleEditor from './components/CycleEditor';
import EventListenEditor from './components/EventListenEditor';
import EventSendEditor from './components/EventSendEditor';
import JsonToStringEditor from './components/JsonToStringEditor';
import StringToJsonEditor from './components/StringToJsonEditor';
import JsonConvertEditor from './components/JsonConvertEditor';
import ResultEditor from './components/ResultEditor';
import ImageEditor from './components/ImageEditor';
import CodeEditor from './components/CodeEditor';
import RestEditor from './components/RestEditor';

const LocalNodeEditor: React.FC<NodeEditorProps> = ({
                                                      node,
                                                      nodeData,
                                                      updateNodeData
                                                    }) => {
  // 根据LocalNode的不同类型渲染不同的编辑界面
  const renderLocalNodeEditor = () => {
    const localNodeType = nodeData.type || '';

    switch (localNodeType) {
      case 'SWITCH': // 条件选择
        return <SwitchEditor nodeData={nodeData} updateNodeData={updateNodeData} />;
      case 'AND': // 与门
        return <AndEditor nodeData={nodeData} updateNodeData={updateNodeData} />;
      case 'OR': // 或门
        return <OrEditor nodeData={nodeData} updateNodeData={updateNodeData} />;
      case 'WAIT': // 等待
        return <WaitEditor nodeData={nodeData} updateNodeData={updateNodeData} />;
      case 'LOOP_START': // 循环
      case 'LOOP_END': // 循环
        return <LoopEditor nodeData={nodeData} updateNodeData={updateNodeData} />;
      case 'CYCLE': // 周期
        return <CycleEditor nodeData={nodeData} updateNodeData={updateNodeData} />;
      case 'EVENTLISTENE': // 事件接收
        return <EventListenEditor nodeData={nodeData} updateNodeData={updateNodeData} node={node} />;
      case 'EVENTSEND': // 事件发送
        return <EventSendEditor nodeData={nodeData} updateNodeData={updateNodeData} node={node} />;
      case 'JSON2STR': // JSON转字符串
        return <JsonToStringEditor nodeData={nodeData} updateNodeData={updateNodeData} />;
      case 'STR2JSON': // 字符串转JSON
        return <StringToJsonEditor nodeData={nodeData} updateNodeData={updateNodeData} />;
      case 'JSONCONVERT': // JSON封装
        return <JsonConvertEditor nodeData={nodeData} updateNodeData={updateNodeData} />;
      case 'RESULT': // 结果展示
        return <ResultEditor nodeData={nodeData} updateNodeData={updateNodeData} />;
      case 'IMAGE': // 图片展示
        return <ImageEditor nodeData={nodeData} updateNodeData={updateNodeData} />;
      case 'CODE': // 代码编辑器
        return <CodeEditor nodeData={nodeData} updateNodeData={updateNodeData} />;
      case 'REST': // REST调用
        return <RestEditor nodeData={nodeData} updateNodeData={updateNodeData} />;
      default:
        return (
          <>
            <Form.Item label="节点标题">
              <Input
                value={nodeData.title || ''}
                onChange={(value) => updateNodeData('title', value)}
              />
            </Form.Item>
            <Form.Item label="节点描述">
              <Input.TextArea
                value={nodeData.description || ''}
                onChange={(value) => updateNodeData('description', value)}
              />
            </Form.Item>
          </>
        );
    }
  };

  return (
    <Form layout="vertical" style={{ minWidth: 200, maxWidth: 1100 }}>
      {renderLocalNodeEditor()}
    </Form>
  );
};

export default LocalNodeEditor;