import PropTypes from '../../_util/vue-types'
import { generateData, calcTotal } from './util'

const Gen = {
  props: {
    x: PropTypes.number.def(20),
    y: PropTypes.number.def(18),
    z: PropTypes.number.def(1),
  },
  data () {
    return {
      nums: '',
    }
  },

  mounted () {
    this.$refs.x.value = this.x
    this.$refs.y.value = this.y
    this.$refs.z.value = this.z
    const vals = this.getVals()
    this.$emit('gen', generateData(vals.x, vals.y, vals.z))
  },
  methods: {
    onGen  (e) {
      e.preventDefault()
      const vals = this.getVals()
      this.$emit('gen', generateData(vals.x, vals.y, vals.z))
      this.nums = calcTotal(vals.x, vals.y, vals.z)
    },
    getVals () {
      return {
        x: parseInt(this.$refs.x.value, 10),
        y: parseInt(this.$refs.y.value, 10),
        z: parseInt(this.$refs.z.value, 10),
      }
    },
  },

  render () {
    const { x, y, z } = this
    return (<div style={{ padding: '0 20px' }}>
      <h2>big data generator</h2>
      <form onSubmit={this.onGen}>
        <span style={{ marginRight: '10px' }}>
          x: <input ref='x' type='number' min='1' required style={{ width: '50px' }} />
        </span>
        <span style={{ marginRight: '10px' }}>
          y: <input ref='y' type='number' min='1' required style={{ width: '50px' }} />
        </span>
        <span style={{ marginRight: '10px' }}>
          z: <input ref='z' type='number' min='1' required style={{ width: '50px' }} />
        </span>
        <button type='submit'>Generate</button>
        <p>total nodes: {this.nums || calcTotal(x, y, z)}</p>
      </form>
      <p style={{ fontSize: '12px' }}>
        x：每一级下的节点总数。y：每级节点里有y个节点、存在子节点。z：树的level层级数（0表示一级）
      </p>
    </div>)
  },
}

export default Gen
