const enum RangeOptionsEnum {
  Equal = 2,               // 等于
  GreaterThan = 3,         // 大于
  GreaterThanOrEqual = 4,  // 大于等于
  LessThan = 5,            // 小于
  LessThanOrEqual = 6,     // 小于等于
  Between = 7,             // 介于
  ContainWithin = 8,       // 包含于
  Contain = 9,             // 包含
  IsEmpty = 10,            // 为空
  Fuzzy = 11,              // 模糊
  DataTag = 12             // 数据标签
}

// 类型枚举类
const enum TagTypeEnum {
  Select = 'select',
  TreeSelect = 'tree-select',
  TransferPicker = 'transfer-picker',
  TabsTransferPicker = 'tabs-transfer-picker',
  InputDateRange = 'input-date-range',
  InputDatetimeRange = 'input-datetime-range',
  InputMonthRange = 'input-month-range',
  InputYear = 'input-year',
  InputYearRange = 'input-year-range',
  InputQuarter = 'input-quarter',
  InputQuarterRange = 'input-quarter-range',
  InputTime = 'input-time',
  InputTimeRange = 'input-time-range',
  InputTag = 'input-tag',
  NestedSelect = 'nested-select',
  InputNumber = 'input-number',
  InputText = 'input-text',
  InputDatetime = 'input-datetime',
  InputDate = 'input-date',//
  InputMonth = 'input-month',
  File = 'lion-upload', // 文件类型
  Picker = 'picker',//颜色
  Switch = 'switch', //开关
  Checkboxes = 'checkboxes'  //复选按钮
}

const RangeOptions: Record<RangeOptionsEnum, string> = {
  [RangeOptionsEnum.Equal]: '等于',
  [RangeOptionsEnum.GreaterThan]: '大于',
  [RangeOptionsEnum.GreaterThanOrEqual]: '大于等于',
  [RangeOptionsEnum.LessThan]: '小于',
  [RangeOptionsEnum.LessThanOrEqual]: '小于等于',
  [RangeOptionsEnum.Between]: '介于',
  [RangeOptionsEnum.ContainWithin]: '包含于',
  [RangeOptionsEnum.Contain]: '包含',
  [RangeOptionsEnum.IsEmpty]: '为空',
  [RangeOptionsEnum.Fuzzy]: '模糊',
  [RangeOptionsEnum.DataTag]: '属于标签'
}

const SegmentStandardOptions = [
  { title: "年", value: "year" },
  { title: "季度", value: "quarter" },
  { title: "月", value: "month" },
  { title: "周", value: "week" },
  { title: "日", value: "day" },
  { title: "时", value: "hour" },
  { title: "分", value: "minute" },
  { title: "秒", value: "second" },
]

const ADVANCED_FILTER_NAME = {
  HEADER: 'advancedHeader',
  FILTER: 'advancedFilter',
  FILTER_SUB: 'advancedFilterSub',
  NONE: 'advancedFilter.noneData',
}

// 条件查询数据
type ConditionFilterData = {
  key: string
  field: string, // 字段名
  condition: number, // 0：或   1：且
  not: boolean, // 不
  op: RangeOptionsEnum, // 等于、大于...
  values?: string | number
  caseSensitive?: 0 | 1,
  dateLine?: boolean//是否日期类集合
  compareField?: string[] //储存values的nameid
  useFieldCompare?: boolean//判断是否为比较字段
}

type OptionFilterData = {
  itemCount: boolean
  itemRepeat: boolean
  itemSumCount: boolean
  showFields: string[]
  sortFields: string[]
  groupByFields: string[]
  section: boolean
  sectionParams: {
    avgSection: boolean
    leftOpenRightClose: boolean
    sectionField: string
    sectionNorm: string
    sections: number[]
  }
}

// 模板默认值数据
type DefaultTemplateData = {
  advancedFilter: ConditionFilterData[],
  // 新版默认值不传sub
  advancedFilterSub?: ConditionFilterData[],
  advancedHeader: object,
  caseSensitive: boolean,
  limitParam: { 
    topN: number, 
    limitStatus: boolean
  },
  optionsParam?: OptionFilterData
}

interface FieldData {
  name: string
  label: string
  comparable: boolean
  isNumerical?: boolean
  type?: string
}

interface ShowFieldData extends FieldData {
  checked: boolean
  disabled: boolean
}

interface SortFieldData extends FieldData {
  order: 0 | 1
}

interface GroupByFieldData extends FieldData {

}

export {
  ADVANCED_FILTER_NAME, RangeOptions, SegmentStandardOptions, RangeOptionsEnum, TagTypeEnum, ConditionFilterData, DefaultTemplateData,
  FieldData, ShowFieldData, SortFieldData, GroupByFieldData
}
