import {UIElement} from "./UIElement";
import Translations from "./i18n/Translations";
import {State} from "../State";
import Combine from "./Base/Combine";

/**
 * Handles the full screen popup on mobile
 */
export class FullScreenMessageBox extends UIElement {

    private static readonly _toTheMap_height : string = "5em";
    
    private _uielement: UIElement;
    private readonly returnToTheMap: UIElement;

    constructor(onClear: (() => void)) {
        super(undefined);

        const self = this;

        
        State.state.fullScreenMessage.addCallbackAndRun(uiElement => {
            this._uielement = new Combine([State.state.fullScreenMessage.data]).SetStyle(
                "display:block;"+
                "padding: 1em;"+
                "padding-bottom:6em;"+
                `margin-bottom:${FullScreenMessageBox._toTheMap_height};`+
                "box-sizing:border-box;"+
                `height:calc(100vh - ${FullScreenMessageBox._toTheMap_height});`+
                "overflow-y: auto;" +
                "max-width:100vw;" +
                "overflow-x:hidden;" +
                "background:white;"

            );
        });
        
        this.ListenTo(State.state.fullScreenMessage);
        
        this.HideOnEmpty(true);

        State.state.fullScreenMessage.addCallback(latestData => {
            if (latestData === undefined) {
                location.hash = "";
            } else {
                // The 'hash' makes sure a new piece of history is added. This makes the 'back-button' on android remove the popup
                location.hash = "#element";
            }
            this.Update();
        })

        if (window !== undefined) {
            window.onhashchange = function () {
                if (location.hash === "") {
                    // No more element: back to the map!
                    self._uielement?.setData(undefined);
                    onClear();
                }
            }
        }

        this.returnToTheMap =
            new Combine([Translations.t.general.returnToTheMap.Clone().SetStyle("font-size:xx-large")])
            .SetStyle("background:#7ebc6f;" +
                "position: fixed;" +
                "z-index: 10000;" +
                "bottom: 0;" +
                "left: 0;" +
                `height: ${FullScreenMessageBox._toTheMap_height};` +
                "width: 100vw;" +
                "color: white;" +
                "font-weight: bold;" +
                "pointer-events: all;" +
                "cursor: pointer;" +
                "padding-top: 1.2em;" +
                "text-align: center;" +
                "padding-bottom: 1.2em;" +
                "box-sizing:border-box")
            .onClick(() => {
                console.log("Returning...")
                State.state.fullScreenMessage.setData(undefined);
                onClear();
                self.Update();
            });

    }


    InnerRender(): string {
        if (State.state.fullScreenMessage.data === undefined) {
            return "";
        }
        return new Combine([this._uielement, this.returnToTheMap])
            .Render();
    }


}