import Vue from '../../../../dist/vue.runtime.common.js'

function createRegisterFn(id) {
  return function (context) {
    context = context || this.$vnode.ssrContext
    context.registered.push(id)
  }
}

function addHooks(comp) {
  const hook = createRegisterFn(comp.name)
  return Object.assign(comp, {
    _ssrRegister: hook,
    beforeCreate: hook
  })
}

const grandchild = addHooks({
  name: 'grandchild',
  props: ['id'],
  serverCacheKey: props => props.id,
  render(h) {
    return h('div', '/test')
  }
})

const child = addHooks({
  name: 'child',
  props: ['id'],
  serverCacheKey: props => props.id,
  render(h) {
    return h(grandchild, { props: { id: this.id } })
  }
})

const app = addHooks({
  name: 'app',
  props: ['id'],
  serverCacheKey: props => props.id,
  render(h) {
    return h(child, { props: { id: this.id } })
  }
})

export default () => {
  return Promise.resolve(
    new Vue({
      render: h => h(app, { props: { id: 1 } })
    })
  )
}