window.timeBlocksShows = 0; //4.5sec
window.timeUntilLose = 0; //12sec
window.correctBlocksNum = 0;
window.maxIncorrectBlocksNum = 0;
window.allBlocksNum = 36;
window.activateClicking = false;

ThermiteNew = {}

$(document).ready(function(){
    $(".container").hide()
})

$(document).ready(function(){
ThermiteNew.Start = function(data) {

    $(".container").show()
    $(".grid").removeClass("won");

    $(".grid").removeClass("won");
    $(".grid").removeClass("lost");
    hideAllBlocks();
    window.maxIncorrectBlocksNum = data.incorrect;
    window.correctBlocksNum = data.correct;
    window.timeBlocksShows = data.showtime; 
    window.timeUntilLose = data.losetime; 
    window.gridCorrectBlocks = generateRandomNumberBetween(1, 36, data.correct);
    window.activateClicking = false;
    showCorrectBlocks();
    setTimeout(()=>{
    hideAllBlocks();
    window.activateClicking = true;
    }, timeBlocksShows*1000);
    setTimeout(()=>{
        isGameForeited();
    }, timeUntilLose*1000);
}


window.addEventListener('message', function(event){
var action = event.data.action;
switch(action) {
    case "Start":
        ThermiteNew.Start(event.data);
        break;
    }
});
})

$(document.body).on("click", ".block", onBlockClick);

function generateRandomNumberBetween(min=1,max=window.allBlocksNum,length = window.correctBlocksNum){
  var arr = [];
  while(arr.length < length){
      var r = Math.floor(Math.random() * (max+1-min)) + min;
      if(arr.indexOf(r) === -1) arr.push(r);
  }
  return arr;
}

function onBlockClick(e){
  if(!activateClicking){
    return;
  }
  
  let clickedBlock = e.target;
  
  let blockNum = clickedBlock.classList.value.match(/(?:block-)(\d+)/)[1];
  blockNum = Number(blockNum);
  let correctBlocks = window.gridCorrectBlocks;

  let correct = correctBlocks.indexOf(blockNum) !== -1;
  clickedBlock.classList.add("clicked");
  if(correct){
    clickedBlock.classList.remove("incorrect");
    clickedBlock.classList.add("correct");
  }
  else{
    clickedBlock.classList.add("incorrect");
    clickedBlock.classList.remove("correct");
  }
checkWinOrLost();
}

function showCorrectBlocks(){
  
  $(".block").each((i,ele)=>{
    let blockNum = ele.classList.value.match(/(?:block-)(\d+)/)[1];
    blockNum = Number(blockNum);
    let correctBlocks = window.gridCorrectBlocks;
    let correct = correctBlocks.indexOf(blockNum) !== -1;
    if(correct){
      ele.classList.add("show");
    }
  });
}
function hideAllBlocks(){
  $(".block").each((i,ele)=>{
    ele.classList.remove("show");
    ele.classList.remove("correct");
    ele.classList.remove("incorrect");
    ele.classList.remove("clicked");
  });
}

function checkWinOrLost(){
  if(isGameWon()){
    hideAllBlocks()
    window.activateClicking = false;
    $(".container").hide()
    $.post('https://memorygame/ThermiteResult', JSON.stringify({
        success: true
    }));
  }
  if(isGameLost()){
    hideAllBlocks();
    $(".container").hide()
    window.activateClicking = false;
    $.post('https://memorygame/ThermiteResult', JSON.stringify({
        success: false
    }));
  }
 
}

function isGameWon(){
  return $(".correct").length >= (window.correctBlocksNum);
}
function isGameLost(){
  return $(".incorrect").length >= window.maxIncorrectBlocksNum;
};

function isGameForeited(){
    if (window.activateClicking ){
        hideAllBlocks();
        $(".container").hide()
        window.activateClicking = false;
        $.post('https://memorygame/ThermiteResult', JSON.stringify({
            success: false
        }));
    }       
}