// FIXME: move to utils
// From: https://stackoverflow.com/a/175787

function isNumeric (str) {
    return !isNaN(str) && // use type coercion to parse the _entirety_ of the string (`parseFloat` alone does not do this)...
           !isNaN(parseFloat(str)) // ...and ensure strings of whitespace fail
}

var options = parseHash();

function sortChanged() {
    const sortValue = document.getElementById('sort-select').value
    const $films = [...document.querySelectorAll('.film')]

    options.sort = sortValue
    updateHash()
    $films.sort((a, b) => {
        let aVal = a.dataset[sortValue]
        let bVal = b.dataset[sortValue]
        if (isNumeric(aVal) && isNumeric(bVal)) {
            aVal = parseFloat(aVal)
            bVal = parseFloat(bVal)
        }
        return aVal < bVal ? -1 : 1
    })
    document.getElementById('films-list').innerHTML = ''
    $films.forEach($film => {
        document.getElementById('films-list').appendChild($film)
    })
}

function filterChanged() {
    const filterValue = document.getElementById('filter-select').value
    options.filter = filterValue
    document.querySelectorAll('.film').forEach(film => {
        if (!options.filter || film.dataset.type.toLowerCase().split(',').indexOf(options.filter.toLowerCase()) > -1) {
            console.log(film.dataset.type.split(','), film.dataset.type.split(',').indexOf(options.filter))
            film.style.display = ''
        } else {
            film.style.display = 'none'
        }
    })
    updateHash()
}

function parseHash() {
    var options = {}
    location.hash.slice(1).split('&').forEach(kv => {
        kv = kv.split('=')
        const k = kv.shift()
        if (k.length) {
            options[k] = kv.join('=')
        }
    })
    return options;
}

function updateHash() {
    const value = Object.keys(options).filter(key => {
        return key && options[key];
    }).map(key => {
        return key + '=' + options[key];
    }).join('&')
    location.hash = value ? '#' + value : ''
}

document.getElementById('sort-select').addEventListener('change', sortChanged)
document.getElementById('filter-select').addEventListener('change', filterChanged)

if (options.sort) {
    document.getElementById('sort-select').value = options.sort
    sortChanged()
}
document.getElementById('filter-select').value = options.filter
if (options.filter) {
    filterChanged()
}

document.querySelectorAll('.films .film figure').forEach(figure => {
    var imgs = figure.querySelectorAll('img')
    if (imgs.length > 1) {
        setInterval(() => {
            var img = figure.querySelector('img')
            img.parentElement.appendChild(img)
        }, 5000 + Math.random() * 1000)
    }
})