// micro html console

function MessageBox(View) {
  let view = View
  // and things inside of it,
  this.zoomCheckbox = {}

  // tracking a load,
  this.briefState = {
    recipName: '',
    recipVersion: '',
    numHunksLeft: 0,
    numLinksLeft: 0,
    isStateHappenning: false,
    setFromBrief: function(brief) {
      this.recipVer = brief.interpreterVersion
      this.recipName = brief.interpreterName
      this.numHunksLeft = brief.numHunks
      briefStateToDom(this)
    },
    decrementHunks: function() {
      this.numHunksLeft--
      briefStateToDom(this)
    },
    incrementHunks: function() {
      this.numHunksLeft++
      briefStateToDom(this)
    },
    decrementLinks: function() {
      this.numLinksLeft--
      briefStateToDom(this)
    },
    incrementLinks: function() {
      this.numLinksLeft++
      briefStateToDom(this)
    }
  }

  let briefStateToDom = (brief) => {
    let str
    if (brief.numHunksLeft > 0) {
      str = `interpreter: ${brief.recipName} ${brief.recipVer} <br> awaiting ${brief.numHunksLeft} hunks`
    } else {
      str = `interpreter: ${brief.recipName} ${brief.recipVer} <br> all loaded OK`
    }
    $(this.msgbox).find('#titleBox').html(str)
  }

  this.msgbox = {}

  /* ---------------------------    ---------------------------- */
  /* ------------------------- STARTUP ------------------------- */
  /* ---------------------------    ---------------------------- */

  this.init = () => {
    //view.log('message box alive')
    console.log("MSGBOXHELLO")
    // a box,
    this.msgbox = $('<div>').addClass('msgbox').get(0)
    // the title, and id of your manager
    this.msgbox.append($('<div>').attr('id', 'titleBox').addClass('msgboxmsg').append('name and interpreter:<br>~ unknown ~<br>truly').get(0))
    // say hello to your manager,
    this.msgbox.append($('<div><i class="em em-wave"></i>').addClass('msgboxbutton').addClass('msgboxmsg').append(' say hello').click((evt) => {
      view.sayHelloToManager()
    }).get(0))
    // a refresh button
    this.msgbox.append($('<div><i class="em em-arrows_counterclockwise"></i>').addClass('msgboxbutton').addClass('msgboxmsg').append(' refresh view').click((evt) => {
      evt.preventDefault()
      view.refresh()
    }).get(0))
    // and then
    this.isHidden = false
    $(view.dom).append(this.msgbox)
  }

  this.toggleHidden = () => {
    if(this.isHidden){
      $(this.msgbox).show()
    } else {
      $(this.msgbox).hide()
    }
  }

  let tpad = 10

  this.setTopMargin = (num) => {
    tpad = num
    this.checkHeight()
  }

  this.checkHeight = () => {
    let ht = view.dom.clientHeight
    $(this.msgbox).css('height', `${ht - 30 - tpad}px`).css('margin-top', `${tpad}px`)
  }

  this.hide = () => {
    $(this.msgbox).css('display', 'none')
  }

  this.unhide = () => {
    $(this.msgbox).css('display', 'inline')
  }

  /* ---------------------------    ---------------------------- */
  /* -------------------------- WRITE -------------------------- */
  /* ---------------------------    ---------------------------- */

  this.write = (data) => {
    if(true) return false
    // write the message
    this.msgbox.append($('<div> -> ' + data + '</div>').addClass('msgboxmsg').get(0))
    // def check
    let heightcheck = () => {
      let height = 0;
      $(this.msgbox).children().each(function(child) {
        // jquery.each() syntax is a bit odd / different than elsewhere, sorry for inconsistency
        height += this.clientHeight + 5
      })
      return height
    }
    // if too tall, remove
    let ch = this.msgbox.clientHeight
    if (heightcheck() > ch) {
      //console.log('rm 1', heightcheck(), ch)
      $(this.msgbox).children().get(3).remove()
      // two at most, sloppy but fast
      if (heightcheck() > ch) {
        //console.log('rm 2', heightcheck(), ch)
        $(this.msgbox).children().get(3).remove()
      }
    }
  }

  this.clear = () => {
    while($(this.msgbox).children().length > 3){
      $(this.msgbox).children().get(3).remove()
    }
  }

}

export default MessageBox