<div id="alert" class="alert danger hidden" role="alert"></div>

<h1>Live resultater</h1>
<br>

<noscript>
Denne siden krever JavaScript
</noscript>

<div id="ranking-table">
Laster inn...
</div>

<script>

document.addEventListener('DOMContentLoaded', () => {
    new ResultService();
});

class ResultService 
{
    constructor()
    {
        this.hash     = 0;
        this.alertbox = document.getElementById("alert");
        this.table    = document.getElementById("ranking-table");

        this.#loop();
    }

    async #loop(self)
    {
        try {
            await this.#updateTable();
            this.alertbox.classList.add("hidden");
        } catch (error) {
            console.log(error);
            this.alertbox.innerHTML = "<b>Noe gikk galt: </b>" + error;
            this.alertbox.classList.remove("hidden");
        }

        setTimeout(() => {
            this.#loop();
        }, 1000);
    }

    async #updateTable()
    {
        let response = await fetch("../api/v1/race/sync.php?h=" + this.hash);

        if (response.status === 204)
        {
            return;
        }

        let json = await response.json();

        this.hash = json.hash;

        let data = json.data;

        let tableHTML = "";
        tableHTML += "<table>";
        tableHTML += "<tr>";
        tableHTML += "<th>Navn</th>";
        tableHTML += "<th>Bestetid</th>";
        tableHTML += "</tr>";

        data.forEach(element => {
            tableHTML += "<tr>";
            tableHTML += "<td>" + element.name + "</td>";
            tableHTML += "<td>" + element.date + "</td>";
            tableHTML += "</tr>";
        });

        tableHTML += "<table>";

        this.table.innerHTML = tableHTML;
    }
}

</script>