import SwitchWidget from "./switch.js";
import attributeService from "../services/attributes.js";
import { t } from "../services/i18n.js";
import type { EventData } from "../components/app_context.js";
import type FNote from "../entities/fnote.js";

/**
 * Switch for the basic properties widget which allows the user to select whether the note is a template or not, which toggles the `#template` attribute.
 */
export default class TemplateSwitchWidget extends SwitchWidget {

    isEnabled() {
        return super.isEnabled() && !this.noteId?.startsWith("_options");
    }

    doRender() {
        super.doRender();

        this.switchOnName = t("template_switch.template");
        this.switchOnTooltip = t("template_switch.toggle-on-hint");

        this.switchOffName = t("template_switch.template");
        this.switchOffTooltip = t("template_switch.toggle-off-hint");

        this.$helpButton.attr("data-help-page", "template.html").show();
    }

    async switchOn() {
        if (this.noteId) {
            await attributeService.setLabel(this.noteId, "template");
        }
    }

    async switchOff() {
        if (this.note && this.noteId) {
            for (const templateAttr of this.note.getOwnedLabels("template")) {
                await attributeService.removeAttributeById(this.noteId, templateAttr.attributeId);
            }
        }
    }

    async refreshWithNote(note: FNote) {
        const isTemplate = note.hasLabel("template");
        this.isToggled = isTemplate;
    }

    entitiesReloadedEvent({ loadResults }: EventData<"entitiesReloaded">) {
        if (loadResults.getAttributeRows().find((attr) => attr.type === "label" && attr.name === "template" && attr.noteId === this.noteId)) {
            this.refresh();
        }
    }
}
