class CreateZMenuScript(PreLaunchHook):
    """Create AYON Menu Zscript to Zbrush.
    Note that this works in combination whit Zbrush startup script
    to successfully install zscripts.menu
    Hook `GlobalHostDataHook` must be executed before this hook.
    """
    app_groups = {"zbrush"}
    order = 12
    launch_types = {LaunchTypes.local}
    def execute(self):
        zscript_path = os.path.join(ZBRUSH_HOST_DIR, "api", "zscripts")
        os.makedirs(zscript_path, exist_ok=True)
        zscript_txt = os.path.join(zscript_path, "ayon_zbrush_menu.txt")
        with open(zscript_txt, "w") as zscript:
            zscript.write(self.ayon_menu())
            zscript.close()
    def ayon_menu(self):
        python_exe = os.environ["AYON_EXECUTABLE"]
        ayon_script = ("""
// Set a variable to " so we can quote the command line arguments for ShellExecute
[VarSet, q, [StrFromAsc, 34]]
[VarSet, addon, "addon"]
[VarSet, zbrush, "zbrush"]
[VarSet, zscript, "run-with-zscript"]
[VarSet, arg, "--launcher"]
[IPalette, "AYON", 1]
[ISubPalette, "AYON:Tools", 2]
// Load
[IButton, "AYON:Tools:Load...", "Open AYON Loader",
	[VarSet, loader, "loader_tool"]
	[VarSet, cmd, [StrMerge, start, " ",#q, #q, "  ",#q, "{launch}", #q]]
	[VarSet, cmd, [StrMerge, cmd, " ", #addon, #q]]
	[VarSet, cmd, [StrMerge, cmd, #q,  " ", #zbrush, #q]]
	[VarSet, cmd, [StrMerge, cmd, #q,  " ", #zscript, #q]]
	[VarSet, cmd, [StrMerge, cmd, #q,  " ", #arg, #q]]
	[VarSet, cmd, [StrMerge, cmd, #q,  " ", #loader, #q]]
	[ShellExecute, cmd], 0, 120
]
// Publish
[IButton, "AYON:Tools:Publish...", "Open AYON Publisher",
	[VarSet, publisher, "publish_tool"]
	[VarSet, cmd, [StrMerge, start, " ",#q, #q, "  ",#q, "{launch}", #q]]
	[VarSet, cmd, [StrMerge, cmd, " ", #addon, #q]]
	[VarSet, cmd, [StrMerge, cmd, #q,  " ", #zbrush, #q]]
	[VarSet, cmd, [StrMerge, cmd, #q,  " ", #zscript, #q]]
	[VarSet, cmd, [StrMerge, cmd, #q,  " ", #arg, #q]]
	[VarSet, cmd, [StrMerge, cmd, #q,  " ", #publisher, #q]]
	[ShellExecute, cmd], 0, 120
]
// Manage
[IButton, "AYON:Tools:Manage...", "Open AYON Scene Inventory UI",
	[VarSet, scene_inventory, "scene_inventory_tool"]
	[VarSet, cmd, [StrMerge, start, " ",#q, #q, "  ",#q, "{launch}", #q]]
	[VarSet, cmd, [StrMerge, cmd, " ", #addon, #q]]
	[VarSet, cmd, [StrMerge, cmd, #q,  " ", #zbrush, #q]]
	[VarSet, cmd, [StrMerge, cmd, #q,  " ", #zscript, #q]]
	[VarSet, cmd, [StrMerge, cmd, #q,  " ", #arg, #q]]
	[VarSet, cmd, [StrMerge, cmd, #q,  " ", #scene_inventory, #q]]
	[ShellExecute, cmd], 0, 120
]
[ISubPalette, "AYON:Project", 2]
// Workfile
[IButton, "AYON:Project:Work Files...", "Open AYON Work Files UI",
	[VarSet, workfiles, "workfiles_tool"]
	[VarSet, cmd, [StrMerge, start, " ",#q, #q, "  ",#q, "{launch}", #q]]
	[VarSet, cmd, [StrMerge, cmd, " ", #addon, #q]]
	[VarSet, cmd, [StrMerge, cmd, #q,  " ", #zbrush, #q]]
	[VarSet, cmd, [StrMerge, cmd, #q,  " ", #zscript, #q]]
	[VarSet, cmd, [StrMerge, cmd, #q,  " ", #arg, #q]]
	[VarSet, cmd, [StrMerge, cmd, #q,  " ", #workfiles, #q]]
	[ShellExecute, cmd], 0, 120
]""").format(launch=python_exe)
        return ayon_script