const submitButton = document.getElementById("submit-token")
const inputField = document.getElementById("token")
const statusField = document.getElementById("token-status")
const errorField = document.getElementById("error-text")

const globalSetting = document.getElementById("setting-global")
const vocabSetting = document.getElementById("setting-vocabulary")
const kanjiSetting = document.getElementById("setting-kanji")

// Set popup content
chrome.storage.local.get(["level", "token", "enabled", "enabledVocab", "enabledKanji"], (data) => {
    // If no token is set, display exlamation mark and checkmark button
    if(data.token === undefined)
    {
        statusField.innerText = String.fromCodePoint(0x2757)
        submitButton.innerText = String.fromCodePoint(0x2705)
        submitButton.classList.add("no-token")
    }
    else    // else display checkmark and reload button
    {
        statusField.innerText = String.fromCodePoint(0x2705)
        submitButton.innerText = String.fromCodePoint(0x1F501)
    }

    // Display the users current WaniKani level
    const levelSpan = document.getElementById("level")
    levelSpan.innerText = data.level

    // If the input field contains text that is not the current token, turn the
    // button into a checkmark (else turn it into a repeat button)
    inputField.addEventListener("input", () => {
        if(inputField.value !== "" && inputField.value !== data.token)
        {
            submitButton.innerText = String.fromCodePoint(0x2705)
            submitButton.classList.add("new-token")
        }
        else 
        {
            submitButton.innerText = String.fromCodePoint(0x1F501)
            submitButton.classList.remove("new-token")
        }
    })

    // Set the switches to thecached values
    globalSetting.checked = data.enabled
    vocabSetting.checked = data.enabledVocab
    kanjiSetting.checked = data.enabledKanji
})

// Submit button pressed
submitButton.addEventListener( "click", () => {
    // If the submit field has a new token, replace the current one with it
    if(submitButton.classList.contains("new-token"))
    {
        chrome.storage.local.set({"token": inputField.value})
        submitButton.classList.remove("new-token", "no-token")
        inputField.value = ""
    }

    if(submitButton.classList.contains("no-token"))
        return

    statusField.innerText = String.fromCodePoint(0x23F1)

    // Sync with wanikani
    chrome.runtime.sendMessage("", {type: "sync"}, response => {
        if(response.success)
        {
            statusField.innerText = String.fromCodePoint(0x2705)
            errorField.innerText = ""

            // Update the users current WaniKani level
            chrome.storage.local.get("level", (data) => {
                const levelSpan = document.getElementById("level")
                levelSpan.innerText = data.level
            })
        }
        else
        {
            statusField.innerText = String.fromCodePoint(0x2757)
            errorField.innerText = response.error
        }
    })
})

// Set settings event listeners
globalSetting.addEventListener("change", () => {
    chrome.storage.local.set({"enabled": globalSetting.checked})

    // If the global settings are unchecked, uncheck the other options as well   
    // and disable them
    if(!globalSetting.checked)
    {
        vocabSetting.checked = false
        kanjiSetting.checked = false

        vocabSetting.setAttribute("disabled", true)
        kanjiSetting.setAttribute("disabled", true)
    }
    // Else restore the values of the switches and activate them agin
    else   
    {
        chrome.storage.local.get(["enabledVocab", "enabledKanji"], (data) => {
            vocabSetting.checked = data.enabledVocab
            kanjiSetting.checked = data.enabledKanji
        })

        vocabSetting.removeAttribute("disabled")
        kanjiSetting.removeAttribute("disabled")
    }

    // Send a message to content script that the switches were updated
    chrome.tabs.query({active: true, currentWindow: true}, (tabs) => {
        chrome.tabs.sendMessage(tabs[0].id, {action: "settingsUpdated"}, (r) => {})
    })
    
})

vocabSetting.addEventListener("change", () => {
    chrome.storage.local.set({"enabledVocab": vocabSetting.checked})
    chrome.tabs.query({active: true, currentWindow: true}, (tabs) => {
        chrome.tabs.sendMessage(tabs[0].id, {action: "settingsUpdated"}, (r) => {})
    })
})

kanjiSetting.addEventListener("change", () => {
    chrome.storage.local.set({"enabledKanji": kanjiSetting.checked})
    chrome.tabs.query({active: true, currentWindow: true}, (tabs) => {
        chrome.tabs.sendMessage(tabs[0].id, {action: "settingsUpdated"}, (r) => {})
    })
})