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
}