import OnClickButtonWidget from "./onclick_button.js";
import appContext from "../../components/app_context.js";
import attributeService from "../../services/attributes.js";
import { t } from "../../services/i18n.js";

export default class ShowTocWidgetButton extends OnClickButtonWidget {
    isEnabled() {
        return super.isEnabled() && this.note && this.note.type === "text" && this.noteContext.viewScope.viewMode === "default";
    }

    constructor() {
        super();

        this.icon("bx-objects-horizontal-left")
            .title(t("show_toc_widget_button.show_toc"))
            .titlePlacement("bottom")
            .onClick((widget) => {
                this.noteContext.viewScope.tocTemporarilyHidden = false;
                appContext.triggerEvent("showTocWidget", { noteId: this.noteId });
                this.toggleInt(false);
            });
    }

    async refreshWithNote(note) {
        this.toggleInt(this.noteContext.viewScope.tocTemporarilyHidden);
    }
    async reEvaluateTocWidgetVisibilityEvent({ noteId }) {
        if (noteId === this.noteId) {
            await this.refresh();
        }
    }
    async entitiesReloadedEvent({ loadResults }) {
        if (loadResults.isNoteContentReloaded(this.noteId)) {
            await this.refresh();
        } else if (
            loadResults
                .getAttributeRows()
                .find((attr) => attr.type === "label" && (attr.name.toLowerCase().includes("readonly") || attr.name === "toc") && attributeService.isAffecting(attr, this.note))
        ) {
            await this.refresh();
        }
    }

    async noteTypeMimeChangedEvent({ noteId }) {
        if (this.isNote(noteId)) {
            await this.refresh();
        }
    }
}
