if (localStorage.getItem("DONOTSHARE-secretkey") !== null) {
    window.location.replace("/app" + window.location.search)
    document.body.innerHTML = "Redirecting..."
    throw new Error();
}
if (localStorage.getItem("DONOTSHARE-password") !== null) {
    window.location.replace("/app" + window.location.search)
    document.body.innerHTML = "Redirecting..."
    throw new Error();
}

let remote = localStorage.getItem("homeserverURL")
if (remote == null) {
    localStorage.setItem("homeserverURL", "https://auth.hectabit.org")
    remote = "https://auth.hectabit.org"
}

let usernameBox = document.getElementById("usernameBox")
let passwordBox = document.getElementById("passwordBox")
let statusBox = document.getElementById("statusBox")
let signupButton = document.getElementById("signupButton")

function showElements(yesorno) {
    if (!yesorno) {
        usernameBox.classList.add("hidden")
        passwordBox.classList.add("hidden")
        signupButton.classList.add("hidden")
    }
    else {
        usernameBox.classList.remove("hidden")
        passwordBox.classList.remove("hidden")
        signupButton.classList.remove("hidden")
    }
}

document.addEventListener('DOMContentLoaded', function() {
    document.getElementById("homeserver").innerText = "Your homeserver is: " + remote + ". "
});

signupButton.addEventListener("click", (event) => {
    async function doStuff() {
        let username = usernameBox.value
        let password = passwordBox.value

        if (username == "") {
            statusBox.innerText = "A username is required!"
            return
        }
        if ((username).length > 20) {
            statusBox.innerText = "Username cannot be more than 20 characters!"
            return
        }
        if (password == "") {
            statusBox.innerText = "A password is required!"
            return
        }
        if ((password).length < 8) {
            statusBox.innerText = "8 or more characters are required!"
            return
        }

        showElements(false)
        statusBox.innerText = "Creating account, please hold on..."

        async function hashpass(pass) {
            let key = pass
            for (let i = 0; i < 128; i++) {
                key = await hashwasm.sha3(key)
            }
            return key
        };


        fetch(remote + "/api/signup", {
            method: "POST",
            body: JSON.stringify({
                username: username,
                password: await hashpass(password)
            }),
            headers: {
                "Content-Type": "application/json; charset=UTF-8"
            }
        })
            .then((response) => response)
            .then((response) => {
                async function doStuff() {
                    let responseData = await response.json()

                    if (response.status == 200) {
                        statusBox.innerText == "redirecting.."
                        localStorage.setItem("DONOTSHARE-secretkey", responseData["key"])
                        localStorage.setItem("DONOTSHARE-password", await hashwasm.sha512(password))

                        window.location.href = "/app" + window.location.search
                    }
                    else if (response.status == 409) {
                        statusBox.innerText = "Username already taken!"
                        showElements(true)
                    }
                    else {
                        statusBox.innerText = "Something went wrong!"
                        showElements(true)
                    }
                }
                doStuff()
            });
    }
    doStuff()
});

document.getElementById("loginButton").addEventListener("click", function(event) {
    event.preventDefault();

    var queryString = window.location.search;
    var newURL = "/login" + queryString;
    window.location.href = newURL;
});

document.getElementById("privacyButton").addEventListener("click", function(event) {
    event.preventDefault();

    var queryString = window.location.search;
    var newURL = "/privacy" + queryString;
    window.location.href = newURL;
});
