'use strict';

// get current theme
function getNowTheme() {
    let nowTheme = document.body.getAttribute('data-theme');
    if (nowTheme === 'auto') {
        return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
    } else {
        return nowTheme === 'dark' ? 'dark' : 'light';
    }
}

// update medium-zoom theme
function updateMeidumTheme(mediumInst) {
    let targetTheme = getNowTheme();
    if (mediumInst) {
        mediumInst.detach();
        if (targetTheme === 'dark') {
            mediumInst = mediumZoom('.img-zoomable', {
                background: '#2f3136',
            });
        } else {
            mediumInst = mediumZoom('.img-zoomable', {
                background: '#fffffd',
            });
        }
    }
}

// update utterances theme
function updateUtterancesTheme(utterancesFrame) {
    let targetTheme = getNowTheme();
    if (utterancesFrame) {
        if (targetTheme === 'dark') {
            utterancesFrame.contentWindow.postMessage(
                {
                    type: 'set-theme',
                    theme: 'photon-dark',
                },
                'https://utteranc.es'
            );
        } else {
            utterancesFrame.contentWindow.postMessage(
                {
                    type: 'set-theme',
                    theme: 'github-light',
                },
                'https://utteranc.es'
            );
        }
    }
}

// load comment button only when comment area exist
if (document.querySelector('span.post-comment-notloaded')) {
    document.querySelector('span.post-comment-notloaded').addEventListener('click', loadComment);
}

// remove empty ul in toc if article only have ## and ###
var secondQueryOfToc = document.querySelectorAll('.sidebar-toc ul ul');
if (secondQueryOfToc.length > 0) {
    secondQueryOfToc.forEach((value, key, parent) => {
        if (value.innerText === '') {
            value.setAttribute('style', 'display: none;');
        }
    });
}

// to-top button
document.querySelector('.btn .btn-scroll-top').addEventListener('click', () => {
    document.documentElement.scrollTop = 0;
});

// init medium-zoom
var mediumInst; // medium-zoom instance
if (getNowTheme() === 'dark') {
    mediumInst = mediumZoom('.img-zoomable', {
        background: '#2f3136',
    });
} else {
    mediumInst = mediumZoom('.img-zoomable', {
        background: '#fffffd',
    });
}

// theme switch button
document.querySelector('.btn .btn-toggle-mode').addEventListener('click', () => {
    let nowTheme = getNowTheme();
    let domTheme = document.body.getAttribute('data-theme');
    let systemTheme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';

    if (domTheme === 'auto') {
        // if now in auto mode, switch to user mode
        document.body.setAttribute('data-theme', nowTheme === 'light' ? 'dark' : 'light');
        localStorage.setItem('fuji_data-theme', nowTheme === 'light' ? 'dark' : 'light');
    } else if (domTheme === 'light') {
        // if now in user mode and light mode
        document.body.setAttribute('data-theme', 'dark');
        // if the theme want to switch is system theme
        localStorage.setItem('fuji_data-theme', systemTheme === 'dark' ? 'auto' : 'dark');
    } else {
        // if now in user mode and dark mode
        document.body.setAttribute('data-theme', 'light');
        // if the theme want to switch is system theme
        localStorage.setItem('fuji_data-theme', systemTheme === 'light' ? 'auto' : 'light');
    }

    // update medium background
    updateMeidumTheme(mediumInst);
    // switch comment area theme
    // only works after comment area are initialized
    let commentArea = document.querySelector('.post-comment');
    let commentStatus = document.querySelector('span.post-comment-notloaded').getAttribute('style');
    if (commentStatus) {
        if (commentArea.getAttribute('data-comment') === 'utterances') {
            updateUtterancesTheme(document.querySelector('.post-comment iframe'));
        }
        if (commentArea.getAttribute('data-comment') === 'disqus') {
            DISQUS.reset({
                reload: true,
            });
        }
    }
});