import {MenuBarDriver, MenuBarEntry} from "tc-shared/ui/frames/menu-bar";
import * as React from "react";
import * as ReactDOM from "react-dom";
import {MenuBarRenderer} from "tc-backend/web/ui/menu-bar/Renderer";

const cssStyle = require("./Renderer.scss");

let uniqueMenuEntryId = 0;
export class WebMenuBarDriver implements MenuBarDriver {
    private readonly htmlContainer: HTMLDivElement;
    private currentEntries: MenuBarEntry[] = [];

    constructor() {
        this.htmlContainer = document.createElement("div");
        this.htmlContainer.classList.add(cssStyle.container);
        document.body.append(this.htmlContainer);
    }

    clearEntries() {
        this.currentEntries = [];
        this.renderMenu();
    }

    setEntries(entries: MenuBarEntry[]) {
        if(this.currentEntries === entries) { return; }
        this.currentEntries = entries.slice(0);
        this.currentEntries.forEach(WebMenuBarDriver.fixupUniqueIds);
        this.renderMenu();
    }

    private static fixupUniqueIds(entry: MenuBarEntry) {
        if(!entry.uniqueId) {
            entry.uniqueId = "item-" + (++uniqueMenuEntryId);
        }
        if(entry.type === "normal") {
            entry.children?.forEach(WebMenuBarDriver.fixupUniqueIds);
        }
    }

    private renderMenu() {
        ReactDOM.render(React.createElement(MenuBarRenderer, { items: this.currentEntries }), this.htmlContainer);
    }
}