// Get data from server
export function getData(path,callback) {   
    var xhr = new XMLHttpRequest();
        xhr.overrideMimeType("application/json");
    xhr.open('GET', path, true);
    xhr.onreadystatechange = function () {
          if (xhr.readyState == 4 && xhr.status == "200") {
            if (callback !== undefined) {
                callback(xhr.responseText);
            }
          }
    };
    xhr.send(null);  
}

 // Parse JSON from given path into a given variable under a given key
 export function getJSON(variable,key,path) {
    getData(path,function(response) {
        // Parse JSON string into object
        variable[key] = JSON.parse(response);
    });
}

export function sendData(route,data,callback) {
    var xhr = new XMLHttpRequest();
    xhr.open("POST", route, true)
    xhr.setRequestHeader('Content-Type', 'application/json')
    xhr.onreadystatechange = function() { 
        if(xhr.readyState === XMLHttpRequest.DONE) {
            var status = xhr.status;
            if (status === 0 || (status >= 200 && status < 400)) {
                // The request has been completed successfully
                if (callback !== undefined) {
                    callback(xhr.responseText)
                }
            } else {
                // Oh no! There has been an error with the request!
            }
            }
    };
    xhr.send(JSON.stringify(data))
}

export function sendText(route,data,callback) {
    var xhr = new XMLHttpRequest();
    xhr.open("POST", route, true)
    xhr.setRequestHeader('Content-Type', 'text/plain')
    xhr.onreadystatechange = function() { 
        if(xhr.readyState === XMLHttpRequest.DONE) {
            var status = xhr.status;
            if (status === 0 || (status >= 200 && status < 400)) {
                // The request has been completed successfully
                if (callback !== undefined) {
                    callback(xhr.responseText)
                }
            } else {
                // Oh no! There has been an error with the request!
            }
            }
    };
    xhr.send(data)
}

function onlyUnique(value, index, array) {
    return array.indexOf(value) === index;
}

export let locales = {
    en: "English",
    ru: "Русский",
    lv: "Latviešu"
}

export function loadLocaleContent(content,componentName,loaded,callback) {
    let locale
    let langs
    let localesAvailable = Object.keys(locales)
    let localeUrl = location.href.split("/").filter(x => localesAvailable.includes(x))
    if (localeUrl.length>0) {
        locale = localeUrl
    }
    else {
        langs = navigator.languages.map(x => x.split("-")[0]).filter(onlyUnique)
        for (let lang of langs) {
            if (localesAvailable.includes(lang))  {
                locale = lang
            }
            break
        }
        if (locale==undefined) {
            locale = "en"
        }
    }
    getData("/locales/" + locale + "/" + componentName + ".json" ,function(response) {
        let parsed = JSON.parse(response)
        if (callback!=undefined) {
            callback(parsed)
        }
        content.set(parsed)
        loaded = 1
    })
    return locale
}