class BlueWeather {

    constructor() {
        // cunstruct xmlhttp
        this.xhttp = new XMLHttpRequest();
        this.host =  window.location.href.substring(0, window.location.href.lastIndexOf("/"));

        this.log("init done", 2)
    }

    getLocations(async, processingFunction, errorFunction) {
        this.xhttp.abort()
        var thisObject = this
        
        if(async) {
            this.xhttp.onreadystatechange = function () {
                if (this.readyState === 4) {
                    // Typical action to be performed when the document is ready:
                    if(this.status === 200) {
                        thisObject.log("getting sensors response was: " + this.responseText, 3)
                        var ret = JSON.parse(this.responseText)
                        if(ret){
                            processingFunction(ret);
                            return
                        }
                    }

                    if(errorFunction !== null) {
                        errorFunction(this.status, this.text)
                    }
                }
            };    
        }

        var url = "https://weather.itsblue.de/api/json.php"
        this.log("starting location request; URL is: " + url, 3)
        this.xhttp.open("GET", url, async)
        this.xhttp.send()
    }

    getLocationData(locId, range = {from:"", to:""}, maxVals = 0, async, processingFunction, errorFunction) {
        this.xhttp.abort()
        var thisObject = this
        
        if(async) {
            this.xhttp.onreadystatechange = function () {
                if (this.readyState === 4) {
                    // Typical action to be performed when the document is ready:
                    if(this.status === 200) {
                        thisObject.log("getting sensors response was: " + this.responseText, 3)
                        var ret = JSON.parse(this.responseText)
                        if(ret){
                            processingFunction(ret);
                            return
                        }
                    }

                    if(errorFunction !== null) {
                        errorFunction(this.status, this.text)
                    }
                }
            };    
        }

        var url = "https://weather.itsblue.de/api/json.php?locId="+locId+"&range[from]="+range.from + "&range[to]="+range.to + "&maxVals=" + maxVals
        this.log("starting location request; URL is: " + url, 3)
        this.xhttp.open("GET", url, async)
        this.xhttp.send()
    }


    endSession() {
        document.cookie = "session=;"
        window.location.href = "./index.html"
    }

    // --------------------
    // - helper functions -
    // --------------------

    getCookie(name) {
        var value = "; " + document.cookie;
        var parts = value.split("; " + name + "=");
        if (parts.length == 2) return parts.pop().split(";").shift();
    }

    findGetParameter(parameterName) {
        var result = null,
            tmp = [];
        location.search
            .substr(1)
            .split("&")
            .forEach(function (item) {
                tmp = item.split("=");
                if (tmp[0] === parameterName) result = decodeURIComponent(tmp[1]);
            });
        return result;
    }

    log(text, level){
        // levels:
        // 0: error
        // 1: warning
        // 2: info
        // 3: debug

        var preString = "[BlueWeather]"

        switch(level){
            case 0:
                preString += "[error] "
                console.error(preString+text)
                break
            case 1:
                preString += "[warining] "
                console.warn(preString+text)
                break
            case 2:
                preString += "[info] "
                console.log(preString+text)
                break
            case 3:
                preString += "[debug] "
                console.debug(preString+text)
        }
    }
}
