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


class Modal{
  constructor(){
    this.__currentModalEl = null;

    window.addEventListener("click", (function(event){
      if (event.target === this.__currentModalEl){
        this.close_modal();
      }
    }).bind(this));

    GlobalEvents.listen("modal-open", (function(event){
      if (event.hasOwnProperty("id") && typeof(event.id) === 'string'){
        var force = (event.hasOwnProperty("force")) ? event.force === true : false;
        this.open_modal_id(event.id, force);
      }
    }).bind(this));

    GlobalEvents.listen("modal-close", (function(event){
      this.close_modal();
    }).bind(this));
  }

  get currentModalElement(){
    return this.__currentModalEl;
  }

  open_modal_id(idname, force=false){
    var el = document.getElementById(idname);
    if (el.classList.contains("modal") && this.__currentModalEl !== el){
      if (this.__currentModalEl !== null && force)
        this.close_modal();
      if (this.__currentModalEl === null){
        if (el){
          return this.open_modal_element(el);
        }
      }
    }
    return this;
  }

  open_modal_element(el, force=false){
    if (el.classList.contains("modal")){
      if (this.__currentModalEl !== null && force)
        this.close_modal();
      if (this.__currentModalEl === null){
        el.classList.add("modal-visible");
        this.__currentModalEl = el;
      }
    }
    return this;
  }

  close_modal(){
    if (this.__currentModalEl !== null){
      this.__currentModalEl.classList.remove("modal-visible");
      this.__currentModalEl = null;
    }
    return this;
  }
}


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