from lnx.logicnode.lnx_nodes import *
import re

class MathTermNode(LnxLogicTreeNode):
    """Formula for symbolic Math"""
    bl_idname = 'LNMathTermNode'
    bl_label = 'Math Term'
    lnx_version = 0

    num_params: IntProperty(default=2, min=0)

    property0: HaxeBoolProperty('property0', name='Resolve params', description='Resolve input param values/subterms for output term/transformations', default=False)

    def __init__(self):
        super(MathTermNode, self).__init__()
        self.register_id()


    def lnx_init(self, context):
        
        # OUTPUTS:
        self.add_output('LnxDynamicSocket', 'Math Term')
        self.add_output('LnxDynamicSocket', 'Simplifyed')
        self.add_output('LnxDynamicSocket', 'Derivate')
        self.add_output('LnxFloatSocket', 'Result')
        self.add_output('LnxStringSocket', 'Error')
        self.add_output('LnxIntSocket', 'ErrorPos')
        
        # INPUTS:
        
        # HOW to setup a Tooltip here and how to put it above the param-add/remove-buttons into layout ?
        self.add_input('LnxStringSocket', 'Math Term', default_value='a+b')
        
        # two default parameters at start
        self.add_input('LnxStringSocket', 'Param 0', default_value='a')
        self.add_input('LnxDynamicSocket', 'Value / Term 0')
        
        self.add_input('LnxStringSocket', 'Param 1', default_value='b')
        self.add_input('LnxDynamicSocket', 'Value / Term 1')

    def add_sockets(self):
        self.add_input('LnxStringSocket', 'Name ' + str(self.num_params))
        #self.add_input('LnxFloatSocket', 'Value ' + str(self.num_params))
        self.add_input('LnxDynamicSocket', 'Value / Term ' + str(self.num_params))
        self.num_params += 1

    def remove_sockets(self):
        if self.num_params > 0:
            self.inputs.remove(self.inputs.values()[-1])
            self.inputs.remove(self.inputs.values()[-1])
            self.num_params -= 1

    def draw_buttons(self, context, layout):
        # Bind values to params Property
        layout.prop(self, 'property0')

        # Button ADD parameter
        row = layout.row(align=True)
        column = row.column(align=True)
        op = column.operator('lnx.node_call_func', text='Add Param', icon='PLUS', emboss=True)
        op.node_index = self.get_id_str()
        op.callback_name = 'add_sockets'

        # Button REMOVE parameter
        column = row.column(align=True)
        op = column.operator('lnx.node_call_func', text='', icon='X', emboss=True)
        op.node_index = self.get_id_str()
        op.callback_name = 'remove_sockets'
        if self.num_params == 0:
            column.enabled = False