#! python
# 
import sys
from steptools import step
from steptools.step import FinderAPI as find


def print_process(D) -> None:
    print("MAIN WORKPLAN --------------------------")

    CUR = step.Adaptive()
    CUR.start_project(D)

    # Select only workplan start/stop, and individual workingsteps
    CUR.set_wanted_all(False)
    CUR.set_wanted(step.CtlEvent.EXEC_WORKPLAN_START)
    CUR.set_wanted(step.CtlEvent.EXEC_WORKPLAN_END)
    CUR.set_wanted(step.CtlEvent.EXEC_SELECT_START)
    CUR.set_wanted(step.CtlEvent.EXEC_SELECT_END)
    CUR.set_wanted(step.CtlEvent.EXEC_WORKSTEP_START)

    INDENT = 0
    while CUR.next():
        E = CUR.event()
        OBJ = CUR.get_active_exec()
        
        if (
                E == step.CtlEvent.EXEC_WORKPLAN_START or
                E == step.CtlEvent.EXEC_SELECT_START
        ):
            # print workplan, then increase indent
            print ("  " * INDENT, step.arm_type(OBJ), OBJ.name)
            INDENT += 1
        elif (
                E == step.CtlEvent.EXEC_WORKPLAN_END or
                E == step.CtlEvent.EXEC_SELECT_END
        ):
            # decrease indent but do not print
            INDENT -= 1
        else:
            # print workingstep
            print ("  " * INDENT, step.arm_type(OBJ), OBJ.name)



def print_tools(D) -> None:
    print("ALL TOOLS --------------------------")
    for T in step.DesignCursor(D, "machining_tool"):
        print("TOOL: ", T)
        print("  mfg ident: ", find.get_tool_identifier(T))
        print("  diameter: ",
              find.get_tool_diameter(T),
              find.get_tool_diameter_unit(T))
        print("  length: ",
              find.get_tool_length(T),
              find.get_tool_length_unit(T))
        print("  corner radius: ",
              find.get_tool_corner_radius(T), 
              find.get_tool_corner_radius_unit(T))
        
        VAL = find.get_tool_overall_length(T)
        if VAL is not None:
            print("  overall assembly length: ",
                  find.get_tool_overall_length(T), 
                  find.get_tool_overall_length_unit(T))

        VAL = find.get_tool_flute_length(T)
        if VAL is not None:
            print("  flute length: ",
                  find.get_tool_flute_length(T),
                  find.get_tool_flute_length_unit(T))
            
        VAL = find.get_tool_taper_angle(T)
        if VAL is not None:
            print("  taper angle: ",
                  find.get_tool_taper_angle(T), 
                  find.get_tool_taper_angle_unit(T))

        VAL = find.get_tool_tip_angle(T)
        if VAL is not None:
            print("  tip angle: ",
                  find.get_tool_tip_angle(T), 
                  find.get_tool_tip_angle_unit(T))

        print("")
        
    
def main() -> int:
    """Summarize a STEP-NC Process"""
    #step.verbose(False)

    args = iter(sys.argv)           # Parse command line arguments
    PROG = next(args)
    SRC = next(args, None)

    if SRC is None:
        print("no input file specified", file = sys.stderr )
        sys.exit(1)

    D = step.open_project(SRC)

    print_tools(D)
    print_process(D)
    
    return 0

if __name__ == '__main__':
    sys.exit(main())
