import { RangeOptions, RangeOptionsEnum, TagTypeEnum } from "./types"

export default {
  // 当前过滤条件是否展示输入的判断
  showInputItem: (option: RangeOptionsEnum, type: TagTypeEnum, isMobile: boolean) => {
    // 操作符不为空 并且 不是文件类型的渲染
    if (isMobile) {
      return option !== RangeOptionsEnum.IsEmpty && type !== TagTypeEnum.File && option !== RangeOptionsEnum.DataTag
    }
    return option !== RangeOptionsEnum.IsEmpty && type !== TagTypeEnum.File
  },
  // 根据组件报文生成对应条件select下拉选项合集
  getRangeOptions: (schema: { type: TagTypeEnum, isNumber?: boolean, dataTag?: object }, isMobile: boolean) => {
    const { type, isNumber, dataTag } = schema
    const to = (options: RangeOptionsEnum[]) => options.map(option => ({ label: RangeOptions[option], value: option, not: isMobile }))

    if (isNumber) {
      return dataTag ?
        to([RangeOptionsEnum.Between, RangeOptionsEnum.Equal, RangeOptionsEnum.GreaterThan, RangeOptionsEnum.GreaterThanOrEqual, RangeOptionsEnum.LessThan, RangeOptionsEnum.LessThanOrEqual, RangeOptionsEnum.IsEmpty, RangeOptionsEnum.DataTag]) :
        to([RangeOptionsEnum.Between, RangeOptionsEnum.Equal, RangeOptionsEnum.GreaterThan, RangeOptionsEnum.GreaterThanOrEqual, RangeOptionsEnum.LessThan, RangeOptionsEnum.LessThanOrEqual, RangeOptionsEnum.IsEmpty])
    }
    switch (type) {
      case TagTypeEnum.File:
        return to([RangeOptionsEnum.IsEmpty])
      case TagTypeEnum.InputText:
        return dataTag ?
          to([RangeOptionsEnum.Equal, RangeOptionsEnum.Contain, RangeOptionsEnum.IsEmpty, RangeOptionsEnum.DataTag]) :
          to([RangeOptionsEnum.Equal, RangeOptionsEnum.Contain, RangeOptionsEnum.IsEmpty])
      case TagTypeEnum.InputDate:
      case TagTypeEnum.InputMonth:
      case TagTypeEnum.InputDatetime:
        return dataTag ?
          to([RangeOptionsEnum.Between, RangeOptionsEnum.Equal, RangeOptionsEnum.GreaterThan, RangeOptionsEnum.GreaterThanOrEqual, RangeOptionsEnum.LessThan, RangeOptionsEnum.LessThanOrEqual, RangeOptionsEnum.IsEmpty, RangeOptionsEnum.DataTag]) :
          to([RangeOptionsEnum.Between, RangeOptionsEnum.Equal, RangeOptionsEnum.GreaterThan, RangeOptionsEnum.GreaterThanOrEqual, RangeOptionsEnum.LessThan, RangeOptionsEnum.LessThanOrEqual, RangeOptionsEnum.IsEmpty])
      case TagTypeEnum.Select:
      case TagTypeEnum.TransferPicker:
        return to([RangeOptionsEnum.Equal, RangeOptionsEnum.IsEmpty])
      default:
        return to([RangeOptionsEnum.Equal, RangeOptionsEnum.IsEmpty, RangeOptionsEnum.Fuzzy])
    }

  },
  
  // 根据组件类型生成对应select条件
  getRangeOption: (type: TagTypeEnum) => {
    const types = [TagTypeEnum.InputDateRange, TagTypeEnum.InputDatetimeRange, TagTypeEnum.InputMonthRange, TagTypeEnum.InputYearRange,
    TagTypeEnum.InputQuarterRange, TagTypeEnum.InputTimeRange, TagTypeEnum.InputDatetime, TagTypeEnum.InputDate, TagTypeEnum.InputMonth]
    return types.includes(type as TagTypeEnum) ?
      RangeOptionsEnum.Between :
      type == TagTypeEnum.File ? RangeOptionsEnum.IsEmpty : RangeOptionsEnum.Equal
  }

}