from ..Script import Script

class PauseAtHeightRepRapFirmwareDuet(Script):

    def getSettingDataString(self):
        return """{
            "name": "Pause at height for RepRapFirmware DuetWifi / Duet Ethernet / Duet Maestro",
            "key": "PauseAtHeightRepRapFirmwareDuet",
            "metadata": {},
            "version": 2,
            "settings":
            {
                "pause_height":
                {
                    "label": "Pause height",
                    "description": "At what height should the pause occur",
                    "unit": "mm",
                    "type": "float",
                    "default_value": 5.0
                }
            }
        }"""

    def execute(self, data):
        current_z = 0.
        pause_z = self.getSettingValueByKey("pause_height")

        layers_started = False
        for layer_number, layer in enumerate(data):
            lines = layer.split("\n")
            for line in lines:
                if ";LAYER:0" in line:
                    layers_started = True
                    continue

                if not layers_started:
                    continue

                if self.getValue(line, 'G') == 1 or self.getValue(line, 'G') == 0:
                    current_z = self.getValue(line, 'Z')
                    if current_z != None:
                        if current_z >= pause_z:
                            prepend_gcode = ";TYPE:CUSTOM\n"
                            prepend_gcode += "; -- Pause at height (%.2f mm) --\n" % pause_z
                            prepend_gcode += self.putValue(M = 226) + "\n"
                            layer = prepend_gcode + layer

                            data[layer_number] = layer # Override the data of this layer with the modified data
                            return data
                        break
        return data