let wordClass = "noun";
let target = words();
let targetLen = target.length;
//単語リストの長さ
console.log(targetLen);

let body = document.getElementsByTagName("body")[0];
let BGMButton = document.getElementById("BGMButton");
let display = document.getElementById("display");
let word = document.getElementById("word");
let pronunc = document.getElementById("pronunc");
let ans = [document.getElementById("ans_0"), document.getElementById("ans_1"), document.getElementById("ans_2"), document.getElementById("ans_3")]
let result = document.getElementById("result");
let scoreElemA = document.getElementById("scoreA");
let scoreElemB = document.getElementById("scoreB");
let corrCntElemA = document.getElementById("corrCntA");
let wrongCntElemA = document.getElementById("wrongCntA");
let corrCntElemB = document.getElementById("corrCntB");
let wrongCntElemB = document.getElementById("wrongCntB");
let perfect = document.getElementById("perfect");
let imperfect = document.getElementById("imperfect");
let replay = document.getElementById("replay");
//let startSound = document.getElementById("startSound");
let corrSound = document.getElementById("corrSound");
let corrSound2 = document.getElementById("corrSound2");
let wrongSound = document.getElementById("wrongSound");
let BGM = document.getElementById("BGM");
corrSound.volume = 1;
wrongSound.volume = 0.5;
BGM.loop = true;
BGM.volume = 1;

let curWordIdx;
let curCorrIdx;
//quiz()の返り値で指定される問題語番号と四択正答番号
let isClicked = [false, false, false, false];
let wordIdx;
let tmpWordIdx;
//関数内の問題語番号の運用
let corrDict;
//問題語の個人情報リスト
let corrIdx;
let wrongIdx = [];
let quizedWordIdx = [];
let tmpWrongIdx;
let wrongChoiceList = [];
let cnt = 0;
let corrCnt = 0;
let wrongCnt = 0;
//正答数・誤答数の計上（のちElemへ）
let wrongs = [];
let wrongsLen;
let mistakenWordIdx;
let mistakenWordPronunc;
let mistakenWordPronuncLen;
let mistakenWordPronuncTxt;
let wrongsTxt;
let isOnTheBeat = false;

function randElem(arr) {
    //与配列からランダムに要素を一つ取り出して返す関数
    return arr[Math.floor(Math.random() * arr.length)];
}
function setQuiz() {
    scoreElemA.style.display = "block";
    display.style.display = "table";
    result.style.display = "none";
    replay.style.display = "none";
}
function removeQuiz() {
    display.style.display = "none";
    result.style.display = "block";
    replay.style.display = "block";
}

function quiz() {
    if (cnt == 20) {
        //終了処理
        removeQuiz();
        cnt = 0;
        wrongsLen = wrongs.length;
        if (wrongsLen == 0) {
            //perfect画面
            perfect.style.display = "block";
            imperfect.style.display = "none";
            scoreElemA.style.display = "none";
            scoreElemB.style.display = "none";
            body.style.animation = "gaming 2s linear infinite";
            result.style.animation = "gaming 2s linear infinite";
            perfect.style.animation = "gaming 2s linear infinite";
            return [null, null];
        } else {
            //imperfect画面
            perfect.style.display = "none";
            imperfect.style.display = "block";
            scoreElemA.style.display = "none";
            scoreElemB.style.display = "block";
            corrCntElemB.innerText = corrCnt;
            wrongCntElemB.innerText = wrongCnt;
            wrongsTxt = "";
            for (let i = 0; i < wrongsLen; ++i) {
                //誤答の一覧の表示
                mistakenWordIdx = wrongs[i][0];
                //間違い方リストから正答番号を取り出した
                mistakenWordPronuncTxt = "‘" + mistakenWordPronunc + "’";
                wrongsTxt += "‘" + target[mistakenWordIdx]["word"] + "’"
                    + "<span style=\"color: gold;\">是</span>‘"
                    + target[mistakenWordIdx]["pronunc"] + "’，<span style=\"color: gold;\">不是‘" + wrongs[i][1] + "’。</span><br>"
            }
            imperfect.innerHTML = wrongsTxt.slice(0, -4);
            return [null, null];
        }
    } else {
        //継続処理
        setQuiz();
        tmpWordIdx = Math.floor(Math.random() * targetLen);
        while (quizedWordIdx.includes(tmpWordIdx) || tmpWordIdx == wordIdx) {
            //今ゲームの出題リストに含まれる出題を排除する
            tmpWordIdx = Math.floor(Math.random() * targetLen);
        }
        wordIdx = tmpWordIdx;
        quizedWordIdx.push(wordIdx);
        corrIdx = Math.floor(Math.random() * 4);
        console.log(corrIdx);
        //問題語と正答番号をリフレッシュした
        corrDict = target[wordIdx]
        word.innerText = corrDict["word"];
        pronunc.innerText = corrDict["meaning"];
        ans[corrIdx].innerText = corrDict["pronunc"];

        //誤答選択肢を作る
        wrongChoiceList = [];
        wrongChoiceList = mkWrongChoice(corrDict["pronunc"][0])
        for (let i = 0; i < 4; ++i) {
            if (i == corrIdx) continue;
            tmpWrongIdx = Math.floor(Math.random() * wrongChoiceList.length);
            while (wrongIdx.includes(tmpWrongIdx)) {
                //今回の誤答選択肢に含まれる誤答を省く
                tmpWrongIdx = Math.floor(Math.random() * wrongChoiceList.length);
            }
            wrongIdx.push(tmpWrongIdx);
            //誤答集に今回使った誤答を追加した
            ans[i].innerText = wrongChoiceList[tmpWrongIdx];
            //ランダム列、ピンイン行の要素を誤答ゾーンに代入した
        }
        wrongIdx = [];
        //誤答集がリセットされた
        cnt++;
        return [wordIdx, corrIdx]
    }
}
function start() {
    //初期値設定
    quizedWordIdx = [];
    [curWordIdx, curCorrIdx] = quiz();
//    startSound.currentTime = 0;
//    startSound.play();
    corrCnt = 0;
    wrongCnt = 0;
    wrongs = [];
    isClicked = [false, false, false, false];
    corrCntElemA.innerText = 0;
    wrongCntElemA.innerText = 0;
    body.style.animation = "";
    result.style.animation = "";
}
start();

ans[0].addEventListener("click", () => {
    if (curCorrIdx == 0) {
        //正解の場合
        if (cnt == 20) {
            corrSound2.play();
        } else {
            corrSound.currentTime = 0;
            corrSound.play();
        }
        corrCnt++;
        corrCntElemA.innerText = corrCnt;
        [curWordIdx, curCorrIdx] = quiz();
        isClicked = [false, false, false, false];
    } else {
        //間違いの場合
        wrongSound.currentTime = 0;
        wrongSound.play();
        if (isClicked[0]) return;
        //同じ誤答の間違いをカウントしないようにした
        wrongCnt++;
        wrongCntElemA.innerText = wrongCnt;
        isClicked[0] = true;
        wrongs.push([curWordIdx, ans[0].textContent]);
        //間違い方リストに正答番号と選んだ誤答が追加された
    }
})
ans[1].addEventListener("click", () => {
    if (curCorrIdx == 1) {
        if (cnt == 20) {
            corrSound2.play();
        } else {
            corrSound.currentTime = 0;
            corrSound.play();
        }
        corrCnt++;
        corrCntElemA.innerText = corrCnt;
        [curWordIdx, curCorrIdx] = quiz();
        isClicked = [false, false, false, false];
    } else {
        wrongSound.currentTime = 0;
        wrongSound.play();
        if (isClicked[1]) return;
        wrongCnt++;
        wrongCntElemA.innerText = wrongCnt;
        isClicked[1] = true;
        wrongs.push([curWordIdx, ans[1].textContent]);
    }
})
ans[2].addEventListener("click", () => {
    if (curCorrIdx == 2) {
        if (cnt == 20) {
            corrSound2.play();
        } else {
            corrSound.currentTime = 0;
            corrSound.play();
        }
        corrCnt++;
        corrCntElemA.innerText = corrCnt;
        [curWordIdx, curCorrIdx] = quiz();
        isClicked = [false, false, false, false];
    } else {
        wrongSound.currentTime = 0;
        wrongSound.play();
        if (isClicked[2]) return;
        wrongCnt++;
        wrongCntElemA.innerText = wrongCnt;
        isClicked[2] = true;
        wrongs.push([curWordIdx, ans[2].textContent]);
    }
})
ans[3].addEventListener("click", () => {
    if (curCorrIdx == 3) {
        if (cnt == 20) {
            corrSound2.play();
        } else {
            corrSound.currentTime = 0;
            corrSound.play();
        }
        corrCnt++;
        corrCntElemA.innerText = corrCnt;
        [curWordIdx, curCorrIdx] = quiz();
        isClicked = [false, false, false, false];
    } else {
        wrongSound.currentTime = 0;
        wrongSound.play();
        if (isClicked[3]) return;
        wrongCnt++;
        wrongCntElemA.innerText = wrongCnt;
        isClicked[3] = true;
        wrongs.push([curWordIdx, ans[3].textContent]);
    }
})
replay.addEventListener("click", start)

BGMButton.addEventListener("click", () => {
    if(isOnTheBeat){
        BGM.pause();
        BGMButton.innerText = "播放音乐";
        isOnTheBeat = false;
    }else{
        BGM.play();
        BGMButton.innerText = "停止音乐";
        isOnTheBeat = true;
    }
})