import keyboardActionsService from "../../services/keyboard_actions.js";
import AbstractButtonWidget from "./abstract_button.js";

let actions;

keyboardActionsService.getActions().then(as => actions = as);

export default class CommandButtonWidget extends AbstractButtonWidget {
    doRender() {
        super.doRender();

        if (this.settings.command) {
            this.$widget.on("click", () => {
                this.tooltip.hide();

                this.triggerCommand(this._command);
            });
        } else {
            console.warn(`Button widget '${this.componentId}' has no defined command`, this.settings);
        }
    }

    getTitle() {
        const title = super.getTitle();

        const action = actions.find(act => act.actionName === this._command);

        if (action && action.effectiveShortcuts.length > 0) {
            return `${title} (${action.effectiveShortcuts.join(", ")})`;
        } else {
            return title;
        }
    }

    onClick(handler) {
        this.settings.onClick = handler;
        return this;
    }

    /**
     * @param {function|string} command
     * @returns {this}
     */
    command(command) {
        this.settings.command = command;
        return this;
    }

    get _command() {
        return typeof this.settings.command === "function"
            ? this.settings.command()
            : this.settings.command;
    }
}
