from svg_to_gcode.svg_parser import parse_string
from svg_to_gcode.compiler import Compiler, interfaces
#pip install svg-to-gcode



class CustomInterface(interfaces.Gcode):
    def __init__(self):
        super().__init__()
        #self.fan_speed = 1
    
    # Override the laser_off method such that it gets the pen up 
    def laser_off(self):
        return "G0 Z5.0;\n"  

    # Override the set_laser_power method
    def set_laser_power(self, power):
        if power < 0 or power > 1:
            raise ValueError(f"{power} is out of bounds. Laser power must be given between 0 and 1. "
                             f"The interface will scale it correctly.")

        return "G0 Z0.0;\n"  
    
    # def home_axes(self):
    #     return "$H;"
    def home_cycle():
        return "$H; \n G92 X0 Y750"


def convertToGcode(targetData, output):

    #creating a compiler with the custom inteface class
    #also giving a custom header with the function home_cycle()
    gcode_compiler = Compiler(CustomInterface, movement_speed=1000, cutting_speed=300, pass_depth=5,custom_header = [CustomInterface.home_cycle()])


    curves = parse_string(targetData) # Parse an svg file into geometric curves
    gcode_compiler.append_curves(curves) 

    return gcode_compiler.compile(passes=1)   





