import BaseUIElement from "./BaseUIElement";

export abstract class UIElement extends BaseUIElement {


    /**
     * Should be overridden for specific HTML functionality
     */
    protected InnerConstructElement(): HTMLElement {
        // Uses the old fashioned way to construct an element using 'InnerRender'
        const innerRender = this.InnerRender();
        if (innerRender === undefined || innerRender === "") {
            return undefined;
        }
        const el = document.createElement("span")
        if (typeof innerRender === "string") {
            el.innerHTML = innerRender
        } else {
            const subElement = innerRender.ConstructElement();
            if (subElement === undefined) {
                return undefined;
            }
            el.appendChild(subElement)
        }
        return el;
    }

    protected abstract InnerRender(): string | BaseUIElement;

}