#include np/client.js
#include np/element.jsx

const MakaiNowPlayingInit = siteHeader => {
    const target = $query('.js-np-target');
    if(!(target instanceof Element))
        return;

    const userName = target.dataset.username;
    if(typeof userName !== 'string')
        return;

    const client = new MakaiNowPlaying(userName);
    const element = new MakaiNowPlayingElement;
    target.replaceWith(element.element);

    const update = () => {
        client.fetch().then(result => {
            if(!result.changed)
                return;

            element.hidden = !result.now_playing;
            element.coverUrl = result.cover;
            element.titleText = result.name;
            element.titleUrl = result.url;
            element.artistText = result.artist.name;
            element.artistUrl = result.artist.url;

            if(result.now_playing && !element.isDefaultCover)
                siteHeader.setBackgroundImage(element.coverUrl);
            else if(!result.first)
                siteHeader.images.random().then(image => {
                    siteHeader.setBackgroundImage(image);
                });
        });
    };

    let interval;
    let currentRate;

    const stop = () => {
        if(interval !== undefined)
            clearInterval(interval);
        interval = undefined;
    };

    const start = rate => {
        if(typeof rate !== 'number')
            rate = 30000;

        if(interval !== undefined || currentRate !== rate)
            stop();

        update();
        setInterval(update, rate);
    };

    start();

    return {
        get client() { return client; },
        get element() { return element; },

        start: start,
        stop: stop,
    };
};