import linuxcnc

class HandlerClass:
    def __init__(self, halcomp, builder, useropts):
        self.halcomp = halcomp
        self.builder = builder
        self.s = linuxcnc.stat()
        self.c = linuxcnc.command()

        # Connect signals for your spinbuttons in Glade
        # e.g., "on_spinbutton_500_value_changed"
        for i in range(500, 519):
            spin_name = f"spinbutton_{i}"
            spin = self.builder.get_object(spin_name)
            if spin:
                # Set initial value from LinuxCNC parameters
                self.s.poll()
                spin.set_value(self.s.settings[i])
                # Connect the signal
                spin.connect("value-changed", self.on_spinbutton_changed, i)

    def on_spinbutton_changed(self, spinbutton, param_num):
        value = spinbutton.get_value()
        # Send an MDI command to assign the G-code parameter
        cmd = f"#[#{param_num}] = {value}"
        self.c.mode(linuxcnc.MODE_MDI)
        self.c.wait_complete()
        self.c.mdi(cmd)
        self.c.wait_complete()
        
# This is boiler code, required for gladevcp
def get_handlers(halcomp,builder,useropts):
    return [HandlerClass(halcomp,builder,useropts)]
