import GlobalEvents from "/app/js/common/EventCaller.js";
import NESBank from "/app/js/models/NESBank.js";



var EL = null;
var SURF = null;
var LastVal = "all";

function OpenControls(){
  if (EL !== null && SURF !== null){
    EL.classList.remove("hidden");
    var e = EL.querySelectorAll("input[type='radio']:checked");
    if (e.length > 0){
      var val = e[0].getAttribute("value");
      LastVal = val;
      if (val === "tiles"){
        SURF.access_mode = 0;
        GlobalEvents.emit("set_palette_mode", 0);
      } else if (val === "sprites"){
        SURF.access_mode = 1;
        GlobalEvents.emit("set_palette_mode", 1);
      } else {
        SURF.access_mode = 2;
      }
    }
  }
}

function CloseControls(){
  if (EL !== null){
    EL.classList.add("hidden");
  }
}


function HANDLE_ModeChanged(){
  var val = this.getAttribute("value");
  if (val !== LastVal){
    LastVal = val;
    if (val === "all"){
      SURF.access_mode = NESBank.ACCESSMODE_FULL;
    } else if (val === "sprites"){
      SURF.access_mode = NESBank.ACCESSMODE_SPRITE;
      GlobalEvents.emit("set_palette_mode", 1);
    } else if (val === "tiles"){
      SURF.access_mode = NESBank.ACCESSMODE_BACKGROUND;
      GlobalEvents.emit("set_palette_mode", 0);
    }
  }
}


class CTRLBankTools{
  constructor(){
    var handle_surfchange = function(surf){
      if (surf instanceof NESBank){
        SURF = surf;
        OpenControls();
      } else {
        SURF = null;
        CloseControls();
      }
    };
    GlobalEvents.listen("change_surface", handle_surfchange);
  }

  initialize(){
    if (EL === null){
      EL = document.querySelectorAll(".painter-bank-controls");
      if (EL.length !== 1){
        console.log("ERROR: More than one painter-bank-controls element found. Ambiguous State.");
        return;
      }
      EL = EL[0];
      var rel = EL.querySelectorAll("input[type='radio']");
      for (let i=0; i < rel.length; i++){
        rel[i].addEventListener("change", HANDLE_ModeChanged);
      }
      OpenControls();
    }
  }
}


const instance = new CTRLBankTools();
export default instance;