<script>
/* eslint no-console:0 */
import Tree, { TreeNode } from '../index'
import '../assets/index.less'
import { gData, getRadioSelectKeys } from './util'
import '../../vc-dialog/assets/index.less'
import Modal from '../../vc-dialog'
import BaseMixin from '../../_util/BaseMixin'

export default {
  mixins: [BaseMixin],
  data () {
    return {
      // expandedKeys: getFilterExpandedKeys(gData, ['0-0-0-key']),
      expandedKeys: ['0-0-0-key'],
      autoExpandParent: true,
      // checkedKeys: ['0-0-0-0-key', '0-0-1-0-key', '0-1-0-0-key'],
      checkedKeys: ['0-0-0-key'],
      checkStrictlyKeys: { checked: ['0-0-1-key'], halfChecked: [] },
      selectedKeys: [],
      treeData: [],
      visible: false,
      multiple: true,
    }
  },
  methods: {
    onExpand (expandedKeys) {
      console.log('onExpand', arguments)
      // if not set autoExpandParent to false, if children expanded, parent can not collapse.
      // or, you can remove all expanded chilren keys.
      this.setState({
        expandedKeys,
        autoExpandParent: false,
      })
    },
    onCheck (checkedKeys) {
      this.setState({
        checkedKeys,
      })
    },
    onCheckStrictly (checkedKeys, /* extra*/) {
      console.log(arguments)
      // const { checkedNodesPositions } = extra;
      // const pps = filterParentPosition(checkedNodesPositions.map(i => i.pos));
      // console.log(checkedNodesPositions.filter(i => pps.indexOf(i.pos) > -1).map(i => i.node.key));
      const cks = {
        checked: checkedKeys.checked || checkedKeys,
        halfChecked: [`0-0-${parseInt(Math.random() * 3, 10)}-key`],
      }
      this.setState({
      // checkedKeys,
        checkStrictlyKeys: cks,
      // checkStrictlyKeys: checkedKeys,
      })
    },
    onSelect (selectedKeys, info) {
      console.log('onSelect', selectedKeys, info)
      this.setState({
        selectedKeys,
      })
    },
    onRbSelect (selectedKeys, info) {
      let _selectedKeys = selectedKeys
      if (info.selected) {
        _selectedKeys = getRadioSelectKeys(gData, selectedKeys, info.node.eventKey)
      }
      this.setState({
        selectedKeys: _selectedKeys,
      })
    },
    onClose () {
      this.setState({
        visible: false,
      })
    },
    handleOk () {
      this.setState({
        visible: false,
      })
    },
    showModal () {
      this.setState({
        expandedKeys: ['0-0-0-key', '0-0-1-key'],
        checkedKeys: ['0-0-0-key'],
        visible: true,
      })
      // simulate Ajax
      setTimeout(() => {
        this.setState({
          treeData: [...gData],
        })
      }, 2000)
    },
    triggerChecked () {
      this.setState({
        checkedKeys: [`0-0-${parseInt(Math.random() * 3, 10)}-key`],
      })
    },
  },

  render () {
    const loop = data => {
      return data.map((item) => {
        if (item.children) {
          return (
            <TreeNode
              key={item.key} title={item.title}
              disableCheckbox={item.key === '0-0-0-key'}
            >
              {loop(item.children)}
            </TreeNode>
          )
        }
        return <TreeNode key={item.key} title={item.title} />
      })
    }
    // console.log(getRadioSelectKeys(gData, this.selectedKeys));
    return (<div style={{ padding: '0 20px' }}>
      <h2>dialog</h2>
      <button class='btn btn-primary' onClick={this.showModal}>show dialog</button>
      <Modal
        title='TestDemo' visible={this.visible}
        onOk={this.handleOk} onClose={this.onClose}
      >
        {this.treeData.length ? (
          <Tree
            checkable class='dialog-tree'
            onExpand={this.onExpand} expandedKeys={this.expandedKeys}
            autoExpandParent={this.autoExpandParent}
            onCheck={this.onCheck} checkedKeys={this.checkedKeys}
          >
            {loop(this.treeData)}
          </Tree>
        ) : 'loading...'}
      </Modal>

      <h2>controlled</h2>
      <Tree
        checkable
        onExpand={this.onExpand} expandedKeys={this.expandedKeys}
        autoExpandParent={this.autoExpandParent}
        onCheck={this.onCheck} checkedKeys={this.checkedKeys}
        onSelect={this.onSelect} selectedKeys={this.selectedKeys}
      >
        {loop(gData)}
      </Tree>
      <button onClick={this.triggerChecked}>trigger checked</button>

      <h2>checkStrictly</h2>
      <Tree
        checkable multiple={this.multiple} defaultExpandAll
        onExpand={this.onExpand} expandedKeys={this.expandedKeys}
        onCheck={this.onCheckStrictly}
        checkedKeys={this.checkStrictlyKeys}
        checkStrictly
      >
        {loop(gData)}
      </Tree>

      <h2>radio's behavior select (in the same level)</h2>
      <Tree
        multiple defaultExpandAll
        onSelect={this.onRbSelect}
        selectedKeys={getRadioSelectKeys(gData, this.selectedKeys) }
      >
        {loop(gData)}
      </Tree>
    </div>)
  },
}

</script>