/**
 * 判断是否是对象
 *
 * @export
 * @param {*} val
 * @returns true/false
 */
export function isObject (val) {
  return Object.prototype.toString.call(val) === '[object Object]'
}

/**
 * 判断是否是Function
 *
 * @export
 * @param {*} val
 * @returns true/false
 */
export function isFunction (val) {
  return Object.prototype.toString.call(val) === '[object Function]'
}

/**
 * 根据value获取columns信息
 *
 * @export
 * @param {*} { value, list, mode, props, level }
 * @param {number} [type=2] 查询不到value数据返回数据类型 1空值null 2默认第一个选项
 * @returns
 */
export function getColumns ({ value, list, mode, props, level }, type = 2) {
  let pickerValue = []
  let pickerColumns = []
  let selectValue = []
  let selectItem = []
  let columnsInfo = null
  switch (mode) {
    case 'selector':
      let index = list.findIndex(item => {
        return isObject(item) ? item[props.value] === value : item === value
      })
      if (index === -1 && type === 1) {
        columnsInfo = null
      } else {
        index = index > -1 ? index : 0
        selectItem = list[index]
        selectValue = isObject(selectItem)
          ? selectItem[props.value]
          : selectItem
        pickerColumns = list
        pickerValue = [index]
        columnsInfo = {
          index: pickerValue,
          value: selectValue,
          item: selectItem,
          columns: pickerColumns
        }
      }
      break
    case 'multiSelector':
      const setPickerItems = (data = [], index = 0) => {
        if (!data.length) return
        const defaultValue = value || []
        if (index < level) {
          const value = defaultValue[index] || ''
          let i = data.findIndex(item => item[props.value] === value)
          if (i === -1 && type === 1) return
          i = i > -1 ? i : 0
          pickerValue[index] = i
          pickerColumns[index] = data
          if (data[i]) {
            selectValue[index] = data[i][props.value]
            selectItem[index] = data[i]
            setPickerItems(data[i][props.children] || [], index + 1)
          }
        }
      }
      setPickerItems(list)
      if (!selectValue.length && type === 1) {
        columnsInfo = null
      } else {
        columnsInfo = {
          index: pickerValue,
          value: selectValue,
          item: selectItem,
          columns: pickerColumns
        }
      }
      break
    case 'unlinkedSelector':
      list.forEach((item, i) => {
        let index = item.findIndex(item => {
          return isObject(item)
            ? item[props.value] === value[i]
            : item === value[i]
        })
        if (index === -1 && type === 1) return
        index = index > -1 ? index : 0
        const columnItem = list[i][index]
        const valueItem = isObject(columnItem)
          ? columnItem[props.value]
          : columnItem
        pickerValue[i] = index
        selectValue[i] = valueItem
        selectItem[i] = columnItem
      })
      pickerColumns = list
      if (!selectValue.length && type === 1) {
        columnsInfo = null
      } else {
        columnsInfo = {
          index: pickerValue,
          value: selectValue,
          item: selectItem,
          columns: pickerColumns
        }
      }
      break
  }
  return columnsInfo
}