import Slider from '../index'
import '../assets/index.less'
const { Range } = Slider
function log (value) {
  console.log(value); //eslint-disable-line
}

const CustomizedRange = {
  data () {
    return {
      lowerBound: 20,
      upperBound: 40,
      value: [20, 40],
    }
  },
  methods: {
    onLowerBoundChange (e) {
      this.lowerBound = +e.target.value
    },
    onUpperBoundChange (e) {
      this.upperBound = +e.target.value
    },
    onSliderChange (value) {
      log(value)
      this.value = value
    },
    handleApply () {
      this.value = [this.lowerBound, this.upperBound]
    },
  },
  render () {
    return (
      <div>
        <label>LowerBound: </label>
        <input type='number' value={this.lowerBound} onChange={this.onLowerBoundChange} />
        <br />
        <label>UpperBound: </label>
        <input type='number' value={this.upperBound} onChange={this.onUpperBoundChange} />
        <br />
        <button onClick={this.handleApply}>Apply</button>
        <br /><br />
        <Range allowCross={false} value={this.value} onChange={this.onSliderChange} />
      </div>
    )
  },
}

const DynamicBounds = {
  data () {
    return {
      min: 0,
      max: 100,
    }
  },
  methods: {
    onSliderChange (value) {
      log(value)
    },
    onMinChange (e) {
      this.min = +e.target.value || 0
    },
    onMaxChange (e) {
      this.max = +e.target.value || 100
    },
  },
  render () {
    return (
      <div>
        <label>Min: </label>
        <input type='number' value={this.min} onInput={this.onMinChange} />
        <br />
        <label>Max: </label>
        <input type='number' value={this.max} onInput={this.onMaxChange} />
        <br /><br />
        <Range defaultValue={[20, 50]} min={this.min} max={this.max}
          onChange={this.onSliderChange}
        />
      </div>
    )
  },
}

const ControlledRange = {
  data () {
    return {
      value: [20, 40, 60, 80],
    }
  },
  methods: {
    handleChange (value) {
      this.value = value
    },
  },
  render () {
    return <Range value={this.value} onChange={this.handleChange} />
  },
}

const ControlledRangeDisableAcross = {
  props: {
    pushable: [Number, Boolean],
  },
  data () {
    return {
      value: [20, 40, 60, 80],
    }
  },
  methods: {
    handleChange (value) {
      this.value = value
    },
  },
  render () {
    const rangeRange = {
      props: {
        value: this.value,
        allowCross: false,
        ...this.$props,
      },
      on: {
        change: this.handleChange,
      },
    }
    return <Range
      {...rangeRange}
    />
  },
}

const PureRenderRange = {
  data () {
    return {
      foo: false,
    }
  },
  methods: {
    handleChange (value) {
      console.log(value)
      this.foo = !this.foo
    },
  },
  render () {
    return <Range defaultValue={[20, 40, 60, 80]} onChange={this.handleChange} allowCross={false} />
  },
}

export default {
  render () {
    const style = { width: '400px', margin: '50px' }
    const pStyle = { margin: '20px 0' }

    return (
      <div>
        <div style={style}>
          <p style={pStyle}>Basic Range,`allowCross=false`</p>
          <Range allowCross={false} defaultValue={[0, 20]} onChange={log} />
        </div>
        <div style={style}>
          <p style={pStyle}>Basic Range,`step=20` </p>
          <Range step={20} defaultValue={[20, 20]} onBeforeChange={log} />
        </div>
        <div style={style}>
          <p style={pStyle}>Basic Range,`step=20, dots` </p>
          <Range dots step={20} defaultValue={[20, 40]} onAfterChange={log} />
        </div>
        <div style={style}>
          <p style={pStyle}>Basic Range,disabled</p>
          <Range allowCross={false} defaultValue={[0, 20]} onChange={log} disabled />
        </div>
        <div style={style}>
          <p style={pStyle}>Controlled Range</p>
          <ControlledRange />
        </div>
        <div style={style}>
          <p style={pStyle}>Controlled Range, not allow across</p>
          <ControlledRangeDisableAcross />
        </div>
        <div style={style}>
          <p style={pStyle}>Controlled Range, not allow across, pushable=5</p>
          <ControlledRangeDisableAcross pushable={5} />
        </div>
        <div style={style}>
          <p style={pStyle}>Multi Range</p>
          <Range count={3} defaultValue={[20, 40, 60, 80]} pushable />
        </div>
        <div style={style}>
          <p style={pStyle}>Multi Range with custom track and handle style</p>
          <Range count={3} defaultValue={[20, 40, 60, 80]} pushable
            trackStyle={[{ backgroundColor: 'red' }, { backgroundColor: 'green' }]}
            handleStyle={[{ backgroundColor: 'yellow' }, { backgroundColor: 'gray' }]}
            railStyle={{ backgroundColor: 'black' }}
          />
        </div>
        <div style={style}>
          <p style={pStyle}>Customized Range</p>
          <CustomizedRange />
        </div>
        <div style={style}>
          <p style={pStyle}>Range with dynamic `max` `min`</p>
          <DynamicBounds />
        </div>
        <div style={style}>
          <p style={pStyle}>Range as child component</p>
          <PureRenderRange />
        </div>
      </div>
    )
  },
}