import { PropType } from 'vue'
import { VxeUI } from '../../ui'

import type { VxeTablePropTypes } from '../../../types'

const { getConfig } = VxeUI

export const tableProps = {
  /** 基本属性 */
  id: [String, Function] as PropType<VxeTablePropTypes.ID>,
  // 数据
  data: Array as PropType<any[]>,
  // 表格的高度
  height: [Number, String] as PropType<VxeTablePropTypes.Height>,
  // 表格的最小高度
  minHeight: {
    type: [Number, String] as PropType<VxeTablePropTypes.MinHeight>,
    default: () => null
  },
  // 表格的最大高度
  maxHeight: [Number, String] as PropType<VxeTablePropTypes.MaxHeight>,
  // 已废弃，被 column-config.resizable 替换
  resizable: {
    type: Boolean as PropType<VxeTablePropTypes.Resizable>,
    default: () => getConfig().table.resizable
  },
  // 是否带有斑马纹
  stripe: {
    type: Boolean as PropType<VxeTablePropTypes.Stripe>,
    default: () => getConfig().table.stripe
  },
  // 是否带有边框
  border: {
    type: [Boolean, String] as PropType<VxeTablePropTypes.Border>,
    default: () => getConfig().table.border
  },
  // 已废弃，被 cell-config.padding 替换
  padding: {
    type: Boolean as PropType<VxeTablePropTypes.Padding>,
    default: null
  },
  // 是否圆角边框
  round: {
    type: Boolean as PropType<VxeTablePropTypes.Round>,
    default: () => getConfig().table.round
  },
  // 表格的尺寸
  size: {
    type: String as PropType<VxeTablePropTypes.Size>,
    default: () => getConfig().table.size || getConfig().size
  },
  // 列的宽度是否自撑开（可能会被废弃的参数，不要使用）
  fit: {
    type: Boolean as PropType<VxeTablePropTypes.Fit>,
    default: () => getConfig().table.fit
  },
  // 表格是否加载中
  loading: Boolean as PropType<VxeTablePropTypes.Loading>,
  // 所有的列对其方式
  align: {
    type: String as PropType<VxeTablePropTypes.Align>,
    default: () => getConfig().table.align
  },
  // 所有的表头列的对齐方式
  headerAlign: {
    type: String as PropType<VxeTablePropTypes.HeaderAlign>,
    default: () => getConfig().table.headerAlign
  },
  // 所有的表尾列的对齐方式
  footerAlign: {
    type: String as PropType<VxeTablePropTypes.FooterAlign>,
    default: () => getConfig().table.footerAlign
  },
  // 是否显示表头
  showHeader: {
    type: Boolean as PropType<VxeTablePropTypes.ShowHeader>,
    default: () => getConfig().table.showHeader
  },
  // （即将废弃）是否要高亮当前选中行
  highlightCurrentRow: {
    type: Boolean as PropType<VxeTablePropTypes.HighlightCurrentRow>,
    default: () => getConfig().table.highlightCurrentRow
  },
  // （即将废弃）鼠标移到行是否要高亮显示
  highlightHoverRow: {
    type: Boolean as PropType<VxeTablePropTypes.HighlightHoverRow>,
    default: () => getConfig().table.highlightHoverRow
  },
  /**
   * （即将废弃）是否要高亮当前选中列
   * @deprecated
   */
  highlightCurrentColumn: {
    type: Boolean as PropType<VxeTablePropTypes.HighlightCurrentColumn>,
    default: () => getConfig().table.highlightCurrentColumn
  },
  /**
   * （即将废弃）鼠标移到列是否要高亮显示
   * @deprecated
   */
  highlightHoverColumn: {
    type: Boolean as PropType<VxeTablePropTypes.HighlightHoverColumn>,
    default: () => getConfig().table.highlightHoverColumn
  },
  // （即将废弃）激活单元格编辑时是否高亮显示
  highlightCell: Boolean as PropType<VxeTablePropTypes.HighlightCell>,
  // 是否显示表尾合计
  showFooter: Boolean as PropType<VxeTablePropTypes.ShowFooter>,
  // 表尾数据
  footerData: Array as PropType<VxeTablePropTypes.FooterData>,
  // 表尾合计的计算方法
  footerMethod: Function as PropType<VxeTablePropTypes.FooterMethod>,
  // 给行附加 className
  rowClassName: [String, Function] as PropType<VxeTablePropTypes.RowClassName>,
  // 给单元格附加 className
  cellClassName: [String, Function] as PropType<VxeTablePropTypes.CellClassName>,
  // 给表头的行附加 className
  headerRowClassName: [String, Function] as PropType<VxeTablePropTypes.HeaderRowClassName>,
  // 给表头的单元格附加 className
  headerCellClassName: [String, Function] as PropType<VxeTablePropTypes.HeaderRowClassName>,
  // 给表尾的行附加 className
  footerRowClassName: [String, Function] as PropType<VxeTablePropTypes.FooterRowClassName>,
  // 给表尾的单元格附加 className
  footerCellClassName: [String, Function] as PropType<VxeTablePropTypes.FooterCellClassName>,
  // 给单元格附加样式
  cellStyle: [Object, Function] as PropType<VxeTablePropTypes.CellStyle>,
  // 给表头单元格附加样式
  headerCellStyle: [Object, Function] as PropType<VxeTablePropTypes.HeaderCellStyle>,
  // 给表尾单元格附加样式
  footerCellStyle: [Object, Function] as PropType<VxeTablePropTypes.FooterCellStyle>,
  // 给行附加样式
  rowStyle: [Object, Function] as PropType<VxeTablePropTypes.RowStyle>,
  // 给表头行附加样式
  headerRowStyle: [Object, Function] as PropType<VxeTablePropTypes.HeaderRowStyle>,
  // 给表尾行附加样式
  footerRowStyle: [Object, Function] as PropType<VxeTablePropTypes.FooterRowStyle>,
  // 用于分组表头，显示为自定义列头，配合 mergeHeaderCells 灵活实现自定义合并
  showCustomHeader: {
    type: Boolean as PropType<VxeTablePropTypes.ShowCustomHeader>,
    default: () => getConfig().table.showCustomHeader
  },
  // 临时合并指定的表头单元格
  mergeHeaderCells: Array as PropType<VxeTablePropTypes.MergeHeaderCells>,
  // 临时合并指定的单元格
  mergeCells: Array as PropType<VxeTablePropTypes.MergeCells>,
  // 临时合并指定的表尾单元格
  mergeFooterCells: Array as PropType<VxeTablePropTypes.MergeFooterCells>,
  mergeFooterItems: Array as PropType<VxeTablePropTypes.MergeFooterItems>,
  // 自定义合并行或列的方法
  spanMethod: Function as PropType<VxeTablePropTypes.SpanMethod>,
  // 表尾合并行或列
  footerSpanMethod: Function as PropType<VxeTablePropTypes.FooterSpanMethod>,
  // 设置所有内容过长时显示为省略号
  showOverflow: {
    type: [Boolean, String] as PropType<VxeTablePropTypes.ShowOverflow>,
    default: () => getConfig().table.showOverflow
  },
  // 设置表头所有内容过长时显示为省略号
  showHeaderOverflow: {
    type: [Boolean, String] as PropType<VxeTablePropTypes.ShowHeaderOverflow>,
    default: () => getConfig().table.showHeaderOverflow
  },
  // 设置表尾所有内容过长时显示为省略号
  showFooterOverflow: {
    type: [Boolean, String] as PropType<VxeTablePropTypes.ShowFooterOverflow>,
    default: () => getConfig().table.showFooterOverflow
  },

  /** 高级属性 */
  /**
   * （即将废弃）columnKey 已废弃，被 column-config.useKey 替换
   * @deprecated
   */
  columnKey: Boolean as PropType<VxeTablePropTypes.ColumnKey>,
  /**
   * （即将废弃）rowKey 已废弃，被 row-config.useKey 替换
   * @deprecated
   */
  rowKey: Boolean as PropType<VxeTablePropTypes.RowKey>,
  /**
   * （即将废弃）rowId 已废弃，被 row-config.keyField 替换
   * @deprecated
   */
  rowId: {
    type: String as PropType<VxeTablePropTypes.RowId>,
    default: () => getConfig().table.rowId
  },
  zIndex: Number as PropType<VxeTablePropTypes.ZIndex>,
  emptyText: {
    type: String as PropType<VxeTablePropTypes.EmptyText>,
    default: () => getConfig().table.emptyText
  },
  keepSource: {
    type: Boolean as PropType<VxeTablePropTypes.KeepSource>,
    default: () => getConfig().table.keepSource
  },
  // 是否自动监听父容器变化去更新响应式表格宽高
  autoResize: {
    type: Boolean as PropType<VxeTablePropTypes.AutoResize>,
    default: () => getConfig().table.autoResize
  },
  // 是否自动根据状态属性去更新响应式表格宽高
  syncResize: [Boolean, String, Number],
  // 响应式布局配置项
  resizeConfig: Object as PropType<VxeTablePropTypes.ResizeConfig>,
  // 列配置项
  columnConfig: Object as PropType<VxeTablePropTypes.ColumnConfig>,
  // 当前列配置项
  currentColumnConfig: Object as PropType<VxeTablePropTypes.CurrentColumnConfig>,
  // 单元格配置项
  cellConfig: Object as PropType<VxeTablePropTypes.CellConfig>,
  // 表头单元格配置项
  headerCellConfig: Object as PropType<VxeTablePropTypes.HeaderCellConfig>,
  // 表尾单元格配置项
  footerCellConfig: Object as PropType<VxeTablePropTypes.FooterCellConfig>,
  // 行配置项
  rowConfig: Object as PropType<VxeTablePropTypes.RowConfig>,
  // 数据聚合配置项
  aggregateConfig: Object as PropType<VxeTablePropTypes.AggregateConfig>,
  // 聚合函数计算精度配置项
  aggregateAccuracyConfig: Object as PropType<VxeTablePropTypes.AggregateAccuracyConfig>,
  /**
   * 已废弃，被 aggregateConfig 替换
   * @deprecated
   */
  rowGroupConfig: Object as PropType<VxeTablePropTypes.RowGroupConfig>,
  // 当前行配置项
  currentRowConfig: Object as PropType<VxeTablePropTypes.CurrentRowConfig>,
  /**
   * 已废弃，被 rowDragConfig 替换
   * @deprecated
   */
  dragConfig: Object as PropType<VxeTablePropTypes.DragConfig>,
  // 行拖拽排序配置项
  rowDragConfig: Object as PropType<VxeTablePropTypes.RowDragConfig>,
  // 列拖拽排序配置项
  columnDragConfig: Object as PropType<VxeTablePropTypes.ColumnDragConfig>,
  // 列调整配置项
  resizableConfig: Object as PropType<VxeTablePropTypes.ResizableConfig>,
  // 序号配置项
  seqConfig: Object as PropType<VxeTablePropTypes.SeqConfig>,
  // 排序配置项
  sortConfig: Object as PropType<VxeTablePropTypes.SortConfig>,
  // 筛选配置项
  filterConfig: Object as PropType<VxeTablePropTypes.FilterConfig>,
  // 浮动筛选配置项
  floatingFilterConfig: Object as PropType<VxeTablePropTypes.FloatingFilterConfig>,
  // 单选框配置
  radioConfig: Object as PropType<VxeTablePropTypes.RadioConfig>,
  // 复选框配置项
  checkboxConfig: Object as PropType<VxeTablePropTypes.CheckboxConfig>,
  // tooltip 配置项
  tooltipConfig: Object as PropType<VxeTablePropTypes.TooltipConfig>,
  // 表头 tooltip 配置项
  headerTooltipConfig: Object as PropType<VxeTablePropTypes.HeaderTooltipConfig>,
  // 表尾 tooltip 配置项
  footerTooltipConfig: Object as PropType<VxeTablePropTypes.FooterTooltipConfig>,
  // 导出配置项
  exportConfig: Object as PropType<VxeTablePropTypes.ExportConfig>,
  // 导入配置项
  importConfig: Object as PropType<VxeTablePropTypes.ImportConfig>,
  // 打印配置项
  printConfig: Object as PropType<VxeTablePropTypes.PrintConfig>,
  // 展开行配置项
  expandConfig: Object as PropType<VxeTablePropTypes.ExpandConfig>,
  // 树形结构配置项
  treeConfig: Object as PropType<VxeTablePropTypes.TreeConfig>,
  // 快捷菜单配置项
  menuConfig: Object as PropType<VxeTablePropTypes.MenuConfig>,
  // 鼠标配置项
  mouseConfig: Object as PropType<VxeTablePropTypes.MouseConfig>,
  // 区域配置项
  areaConfig: Object as PropType<VxeTablePropTypes.AreaConfig>,
  // 按键配置项
  keyboardConfig: Object as PropType<VxeTablePropTypes.KeyboardConfig>,
  // 复制粘/贴配置项
  clipConfig: Object as PropType<VxeTablePropTypes.ClipConfig>,
  // 查找/替换配置项
  fnrConfig: Object as PropType<VxeTablePropTypes.FNRConfig>,
  // 编辑配置项
  editConfig: Object as PropType<VxeTablePropTypes.EditConfig>,
  // 数据状态监听配置项
  editDirtyConfig: Object as PropType<VxeTablePropTypes.EditDirtyConfig>,
  // 校验配置项
  validConfig: Object as PropType<VxeTablePropTypes.ValidConfig>,
  // 校验规则配置项
  editRules: Object as PropType<VxeTablePropTypes.EditRules>,
  // 加载中配置项
  loadingConfig: Object as PropType<VxeTablePropTypes.LoadingConfig>,
  // 空内容渲染配置项
  emptyRender: Object as PropType<VxeTablePropTypes.EmptyRender>,
  // 自定义列配置项
  customConfig: Object as PropType<VxeTablePropTypes.CustomConfig>,
  /**
   * （即将废弃）横向虚拟滚动配置项
   * @deprecated
   */
  scrollX: Object as PropType<VxeTablePropTypes.ScrollX>,
  /**
   * （即将废弃）纵向虚拟滚动配置项
   * @deprecated
   */
  scrollY: Object as PropType<VxeTablePropTypes.ScrollY>,
  // 横向虚拟滚动配置项
  virtualXConfig: Object as PropType<VxeTablePropTypes.VirtualXConfig>,
  // 纵向虚拟滚动配置项
  virtualYConfig: Object as PropType<VxeTablePropTypes.VirtualYConfig>,
  // 滚动条配置项
  scrollbarConfig: Object as PropType<VxeTablePropTypes.ScrollbarConfig>,
  // 可撤销配置项
  undoHistoryConfig: Object as PropType<VxeTablePropTypes.UndoHistoryConfig>,
  // （即将废弃）优化相关
  animat: {
    type: Boolean as PropType<VxeTablePropTypes.Animat>,
    default: () => getConfig().table.animat
  },
  // （可能会被废弃的参数，不要使用）
  delayHover: {
    type: Number as PropType<VxeTablePropTypes.DelayHover>,
    default: () => getConfig().table.delayHover as number
  },
  // 额外的参数
  params: Object as PropType<VxeTablePropTypes.Params>
}
