// IDDE sends msgs to manager, does display etc
// starts with a native manager

/* codename NROL39 aka cuttlefish */
/* aka the teuthologist */

// this is toplevel, UI is meta-hunk
// we run loop where UI passes messages to bower manager
// this is like the manager 'bootstrap' file ?

'use strict'

import Manager from './hunks/manager.js'
import TLV from './view/vtoplevel.js'

// this is the TL
// but heirarchichally, we can slave views to managers ...
// views push messages to managers ...

// our invisible overlord
let NROL = new Manager()
NROL.name = 'nrol'
// init sets type and ind,
NROL.init()
// this is going to sit in the outbuffer until the view resolves

// want handles on this we think ?
let view = {}
let land

// runs the loop inside of V8's loop: this way our interpreter is non-blocking
// for other js async business
function bootloop() {
  // js u wyldin ! (this is probably slow)
  try {
    NROL.loop()
  } catch (err) {
    console.error('ERR @ top of loop:', err)
    // write to the toplevel msgbox
    view.msgbox.write('ERR @ top of loop, see console, program halting!')
    console.error('loop halting, mgr bailing')
    return
  }
  setTimeout(bootloop)
}

window.onload = () => {
  console.log('BOOTUP')
  NROL.addHunk('view', 'tlview').then((vw) => {
    // console.log('ADDHUNK VIEW RESOLVES')
    // gotta git this
    view = vw
    $('#wrapper').get(0).append(view.dom)
    // itself
    view.onload()
    TLV(view)
    console.log("MTL'd")
  }).then(() => {
    // outHunkIndex, outIndex, inHunkIndex, inIndex, debug
    NROL.addLink(1, 0, 0, 0, false)
    NROL.addLink(0, 0, 1, 0, false)
    bootloop()
    // kick this later
    setTimeout(() => {
      view.refresh().then(() => {
        // if you make links work properly (directionfull)
        // you can just pin view outputs to the left, collected,
        // and the rest should sort itself out
        //view.defs[0].floaters[0].fixTo(700,200)
        view.defs[1].unwrap()
        view.defs[1].floaters[0].fixTo(400, 100)
        //view.defs[1].floaters[1].fixTo(800, 300)
        // xtra
        /*
        view.patchset.mergePatch('lsocket').then(() => {
          let nlink = view.defs.find((cnd) => {
            return cnd.type === 'link'
          })
          nlink.floaters[0].fixTo(500,500)
          let nview = view.defs.find((cnd) =>{
            return (cnd.type === 'view' && cnd.name !== 'tlview')
          })
          view.zoomExtents()
          nview.hunk.refresh()
        })
        */
      })
    }, 100)
  }).catch((err) => {
    console.log(err)
  })
}