{{!
    This file is part of Moodle - https://moodle.org/

    Moodle is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    Moodle is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
}}
{{!
    @template file/tiny/commands_js

    AMD amd/src/commands.js file.

    Context variables required for this template:
    * component
    * copyright

    Example context (json):
    {
        "component": "tiny_example",
        "copyright": "2022 Andrew Lyons <andrew@nicols.co.uk>"
    }
}}
{{< common/boilerplate_amd_js }}
{{$ description }}Commands helper for the Moodle {{ component }} plugin.{{/ description }}
{{$ modulename }}commands{{/ modulename }}
{{$ copyright }}{{ copyright }}{{/ copyright }}
{{/ common/boilerplate_amd_js }}

{{# self.defines_buttons }}
import {getButtonImage} from 'editor_tiny/utils';
{{/ self.defines_buttons }}
import {get_string as getString} from 'core/str';
import {
    component,
{{# self.commandnames }}
    {{ commandName }},
{{/ self.commandnames }}
{{# self.defines_buttons }}
    icon,
{{/ self.defines_buttons }}
} from './common';

/**
 * Handle the action for your plugin.
 * @param {TinyMCE.editor} editor The tinyMCE editor instance.
 */
const handleAction = (editor) => {
    // TODO Handle the action.
    window.console.log(editor);
};

/**
 * Get the setup function for the buttons.
 *
 * This is performed in an async function which ultimately returns the registration function as the
 * Tiny.AddOnManager.Add() function does not support async functions.
 *
 * @returns {function} The registration function to call within the Plugin.add function.
 */
export const getSetup = async() => {
    const [
{{# self.buttons }}
        {{ buttonName }}Title,
{{/ self.buttons }}
{{# self.menuitems }}
        {{ menuItemName }}Title,
{{/ self.menuitems }}
        buttonImage,
    ] = await Promise.all([
{{# self.buttons }}
        getString('button_{{ name }}', component),
{{/ self.buttons }}
{{# self.menuitems }}
        getString('menuitem_{{ name }}', component),
{{/ self.menuitems }}
        getButtonImage('icon', component),
    ]);

    return (editor) => {
{{# self.defines_buttons }}
        // Register the Moodle SVG as an icon suitable for use as a TinyMCE toolbar button.
        editor.ui.registry.addIcon(icon, buttonImage.html);

{{# self.buttons }}
        // Register the {{ name }} Toolbar Button.
        editor.ui.registry.addButton({{ buttonName }}, {
            icon,
            tooltip: {{buttonName}}Title,
            onAction: () => handleAction(editor),
        });
{{/ self.buttons }}
{{/ self.defines_buttons }}
{{# self.defines_menuitems }}
{{# self.menuitems }}

        // Add the {{ name }} Menu Item.
        // This allows it to be added to a standard menu, or a context menu.
        editor.ui.registry.addMenuItem({{ menuItemName }}, {
            icon,
            text: {{menuItemName}}Title,
            onAction: () => handleAction(editor),
        });
{{/ self.menuitems }}
{{/ self.defines_menuitems }}
    };
};
