const SEC_MS = 1000
const MIN_MS = SEC_MS * 60
const HOUR_MS = MIN_MS * 60
const DAY_MS = HOUR_MS * 24

const DAYS_SHORT = [
    "Mon",
    "Tue",
    "Wed",
    "Thu",
    "Fri",
    "Sat",
    "Sun"
]

const MONTHS = [
    "January",
    "February",
    "March",
    "April",
    "May",
    "June",
    "July",
    "August",
    "September",
    "October",
    "November",
    "December"
]

//////////////////////////////////////////////////////////
//                                                      //
// Taken from: https://weeknumber.com/how-to/javascript //
//                                                      //
//////////////////////////////////////////////////////////
Date.prototype.getWeek = function() {
    let date = new Date(this.getTime())
    date.setHours(0, 0, 0, 0)

    // Thursday in current week decides the year.
    date.setDate(date.getDate() + 3 - (date.getDay() + 6) % 7)

    // January 4 is always in week 1.
    let week1 = new Date(date.getFullYear(), 0, 4)

    // Adjust to Thursday in week 1 and count number of weeks from date to week1.
    return 1 + Math.round(((date.getTime() - week1.getTime()) / 86400000 - 3 + (week1.getDay() + 6) % 7) / 7)
}

function formatDate(date) {
    let year = date.getFullYear().toString().padStart(4, "0")
    let month = (date.getMonth() + 1).toString().padStart(2, "0")
    let day = date.getDate().toString().padStart(2, "0")
    return `${year}-${month}-${day}`
}

function formatDuration(duration) {
    let res = ""
    if (duration < 0) {
        duration *= -1
        res += "-"
    }
    let hours = Math.floor(duration / 60)
    duration -= hours * 60
    duration = Math.round(duration)

    if (hours > 0) {
        res += hours.toString() + "h"
        res += duration.toString().padStart(2, "0")
    } else {
        res += duration.toString() + "min"
    }
    return res
}

function formatPercentage(ratio) {
    let percentage = Math.round(ratio * 100)
    return percentage + "%"
}

function req(url, options = {}) {
    let headers = options.headers || {}
    let csrftoken = document.querySelector("input[name='csrfmiddlewaretoken']").value
    headers["X-CSRFToken"] = csrftoken
    options.headers = headers
    return fetch(url, options)
}

function getTemplate(cls) {
    let elmt = document.querySelector(".template." + cls).cloneNode(true)
    elmt.classList.remove("template")
    return elmt
}