if(Debug.debug){
  console.log("\n\n\n\n\n\n           ———    Sᴛλʀᴛɪɴɢ  Uʟᴛʀᴀᴡɪᴅɪꜰʏ    ———\n               <<   ʟᴏᴀᴅɪɴɢ ᴍᴀɪɴ ꜰɪʟᴇ   >>\n\n\n\n");
  try {
    if(window.self !== window.top){
      console.log("%cWe aren't in an iframe.", "color: #afc, background: #174");
    }
    else{
      console.log("%cWe are in an iframe!", "color: #fea, background: #d31", window.self, window.top);
    }
  } catch (e) {
    console.log("%cWe are in an iframe!", "color: #fea, background: #d31");
  }
}


class UW {
  constructor(){
    this.pageInfo = undefined;
    this.comms = undefined;
    this.settings = undefined;
    this.keybinds = undefined;
  }

  async init(){
    if (Debug.debug) {
      console.log("[uw::main] loading configuration ...");
    }
  
    // init() is re-run any time settings change
    if (this.pageInfo) {
      if(Debug.debug){
        console.log("[uw::init] Destroying existing pageInfo", this.pageInfo);
      }
      this.pageInfo.destroy();
    }
    if (this.comms) {
      this.comms.destroy();
    }
  
    if (!this.settings) {
      var ths = this;
      this.settings = new Settings(undefined, () => ths.init());
      await this.settings.init();
    }
  
    this.comms = new CommsClient('content-client-port', this.settings);
  
    // če smo razširitev onemogočili v nastavitvah, ne naredimo ničesar
    // If extension is soft-disabled, don't do shit
    if(! this.settings.canStartExtension()){
      if(Debug.debug) {
        console.log("[uw::init] EXTENSION DISABLED, THEREFORE WONT BE STARTED")
      }
      return;
    }
  
    try {
      this.pageInfo = new PageInfo(this.comms, this.settings);
      if(Debug.debug){
        console.log("[uw.js::setup] pageInfo initialized. Here's the object:", this.pageInfo);
      }
      this.comms.setPageInfo(this.pageInfo);
  
      this.keybinds = new Keybinds(this.pageInfo);
      this.keybinds.setup();
      
    } catch (e) {
      console.log("[uw::init] FAILED TO START EXTENSION. Error:", e);
    }
  
    
  }
}

var uw = new UW();
uw.init();