import { stringifyYaml } from "obsidian";
import type InstaTocPlugin from "../../../Plugin";
import { getLocalSettingsOmitSuggestions } from "../../../settings/localSettingsCompletionOptions";
import { normalizeLocalTocSettings } from "../../../settings/localTocSettings";
import { LocalSettingsComponent, Modal, ModalBase, type MaybeAsyncFn } from "../..";

export default class LocalSettingsModal extends ModalBase {
    private yamlContent: string;

    constructor(plugin: InstaTocPlugin, onSubmit: MaybeAsyncFn<[string], boolean>) {
        super(plugin, onSubmit);
        this.yamlContent = stringifyYaml(normalizeLocalTocSettings(plugin.validator.localTocSettings));
    }

    onSaveSuccess(content: string): void {
        this.yamlContent = content;
    }

    async open(): Promise<void> {
        const darkMode = this.app.isDarkMode();
        const omitSuggestions = getLocalSettingsOmitSuggestions(this.plugin.validator.metadata?.headings);

        await this.mounter.setup(Modal, {
            componentClassInstance: this,
            plugin: this.plugin,
            modalTitle: "Local Settings (YAML)",
            ModalContentComponent: {
                component: LocalSettingsComponent,
                props: {
                    initialYaml: this
                        .yamlContent,
                    darkMode,
                    omitSuggestions
                }
            }
        });
    }
}
