"""
Simple Input node implementation compatible with NodeGraphQt.

This is a simplified version that ensures compatibility with the NodeGraphQt
registration system.
"""

try:
    from NodeGraphQt import BaseNode
    NODEGRAPH_AVAILABLE = True
except ImportError:
    NODEGRAPH_AVAILABLE = False
    # Create a mock base class
    class BaseNode:
        def __init__(self):
            pass


class SimpleInputNode(BaseNode):
    """Simple Input node for data sources."""
    
    __identifier__ = 'com.cluster.input_node'
    NODE_NAME = 'Input Node'
    
    def __init__(self):
        super().__init__()
        
        if NODEGRAPH_AVAILABLE:
            # Setup node connections
            self.add_output('output', color=(0, 255, 0))
            self.set_color(83, 133, 204)
            
            # Add basic properties
            self.create_property('source_type', 'Camera')
            self.create_property('device_id', 0)
            self.create_property('resolution', '1920x1080')
            self.create_property('fps', 30)


class SimpleModelNode(BaseNode):
    """Simple Model node for AI inference."""
    
    __identifier__ = 'com.cluster.model_node'
    NODE_NAME = 'Model Node'
    
    def __init__(self):
        super().__init__()
        
        if NODEGRAPH_AVAILABLE:
            # Setup node connections
            self.add_input('input', multi_input=False, color=(255, 140, 0))
            self.add_output('output', color=(0, 255, 0))
            self.set_color(65, 84, 102)
            
            # Add basic properties
            self.create_property('model_path', '')
            self.create_property('dongle_series', '720')
            self.create_property('num_dongles', 1)


class SimplePreprocessNode(BaseNode):
    """Simple Preprocessing node."""
    
    __identifier__ = 'com.cluster.preprocess_node'
    NODE_NAME = 'Preprocess Node'
    
    def __init__(self):
        super().__init__()
        
        if NODEGRAPH_AVAILABLE:
            # Setup node connections
            self.add_input('input', multi_input=False, color=(255, 140, 0))
            self.add_output('output', color=(0, 255, 0))
            self.set_color(45, 126, 72)
            
            # Add basic properties
            self.create_property('resize_width', 640)
            self.create_property('resize_height', 480)
            self.create_property('normalize', True)


class SimplePostprocessNode(BaseNode):
    """Simple Postprocessing node."""
    
    __identifier__ = 'com.cluster.postprocess_node'
    NODE_NAME = 'Postprocess Node'
    
    def __init__(self):
        super().__init__()
        
        if NODEGRAPH_AVAILABLE:
            # Setup node connections
            self.add_input('input', multi_input=False, color=(255, 140, 0))
            self.add_output('output', color=(0, 255, 0))
            self.set_color(153, 51, 51)
            
            # Add basic properties
            self.create_property('output_format', 'JSON')
            self.create_property('confidence_threshold', 0.5)


class SimpleOutputNode(BaseNode):
    """Simple Output node for data sinks."""
    
    __identifier__ = 'com.cluster.output_node'
    NODE_NAME = 'Output Node'
    
    def __init__(self):
        super().__init__()
        
        if NODEGRAPH_AVAILABLE:
            # Setup node connections
            self.add_input('input', multi_input=False, color=(255, 140, 0))
            self.set_color(255, 140, 0)
            
            # Add basic properties
            self.create_property('output_type', 'File')
            self.create_property('destination', '')
            self.create_property('format', 'JSON')


# Export the simple nodes
SIMPLE_NODE_TYPES = {
    'Input Node': SimpleInputNode,
    'Model Node': SimpleModelNode,
    'Preprocess Node': SimplePreprocessNode,
    'Postprocess Node': SimplePostprocessNode,
    'Output Node': SimpleOutputNode
}