import type { ComponentPublicInstance, ExtractPropTypes, PropType } from 'vue'
import type { CalendarFormatter, CalendarTimeFilter, CalendarType } from '../wd-calendar-view/types'
import type { FormItemRule } from '../wd-form/types'
export declare const calendarProps: {
  /**
   * 选中值，为 13 位时间戳或时间戳数组
   */
  modelValue: {
    type: PropType<number | number[] | null>
    required: true
  }
  /**
   * 日期类型，可选值：date / dates / datetime / week / month / daterange / datetimerange / weekrange / monthrange
   */
  type: {
    type: PropType<CalendarType>
    default: CalendarType
  }
  /**
   * 最小日期，为 13 位时间戳
   */
  minDate: {
    type: NumberConstructor
    default: number
  }
  /**
   * 最大日期，为 13 位时间戳
   */
  maxDate: {
    type: NumberConstructor
    default: number
  }
  /**
   * 周起始天
   */
  firstDayOfWeek: {
    type: NumberConstructor
    default: number
  }
  /**
   * 日期格式化函数
   */
  formatter: PropType<CalendarFormatter>
  /**
   * type 为范围选择时有效，最大日期范围
   */
  maxRange: NumberConstructor
  /**
   * type 为范围选择时有效，选择超出最大日期范围时的错误提示文案
   */
  rangePrompt: StringConstructor
  /**
   * type 为范围选择时有效，是否允许选择同一天
   */
  allowSameDay: {
    type: BooleanConstructor
    default: boolean
  }
  /**
   * 选中日期所使用的当日内具体时刻
   */
  defaultTime: {
    type: PropType<string | string[]>
  }
  /**
   * type 为 'datetime' 或 'datetimerange' 时有效，用于过滤时间选择器的数据
   */
  timeFilter: PropType<CalendarTimeFilter>
  /**
   * type 为 'datetime' 或 'datetimerange' 时有效，是否不展示秒修改
   */
  hideSecond: {
    type: BooleanConstructor
    default: boolean
  }
  /**
   * 选择器左侧文案
   */
  label: StringConstructor
  /**
   * 设置左侧标题宽度
   */
  labelWidth: StringConstructor
  /**
   * 使用 label 插槽时设置该选项
   */
  useLabelSlot: {
    type: BooleanConstructor
    default: boolean
  }
  /**
   * 使用默认插槽时设置该选项
   */
  useDefaultSlot: {
    type: BooleanConstructor
    default: boolean
  }
  /**
   * 禁用
   */
  disabled: {
    type: BooleanConstructor
    default: boolean
  }
  /**
   * 只读
   */
  readonly: {
    type: BooleanConstructor
    default: boolean
  }
  /**
   * 选择器占位符
   */
  placeholder: StringConstructor
  /**
   * 弹出层标题
   */
  title: StringConstructor
  /**
   * 选择器的值靠右展示
   */
  alignRight: {
    type: BooleanConstructor
    default: boolean
  }
  /**
   * 是否为错误状态，错误状态时右侧内容为红色
   */
  error: {
    type: BooleanConstructor
    default: boolean
  }
  /**
   * 是否必填
   */
  required: {
    type: BooleanConstructor
    default: boolean
  }
  /**
   * 设置选择器大小，可选值：large
   */
  size: StringConstructor
  /**
   * 是否垂直居中
   */
  center: {
    type: BooleanConstructor
    default: boolean
  }
  /**
   * 点击遮罩是否关闭
   */
  closeOnClickModal: {
    type: BooleanConstructor
    default: boolean
  }
  /**
   * 弹框层级
   */
  zIndex: {
    type: NumberConstructor
    default: number
  }
  /**
   * 是否显示确定按钮
   */
  showConfirm: {
    type: BooleanConstructor
    default: boolean
  }
  /**
   * 确定按钮文字
   */
  confirmText: StringConstructor
  /**
   * 自定义展示文案的格式化函数，返回一个字符串
   */
  displayFormat: PropType<CalendarDisplayFormat>
  /**
   * 自定义范围选择类型的面板内部回显，返回一个字符串
   */
  innerDisplayFormat: PropType<CalendarInnerDisplayFormat>
  /**
   * 是否超出隐藏
   */
  ellipsis: {
    type: BooleanConstructor
    default: boolean
  }
  /**
   * 是否显示类型切换功能
   */
  showTypeSwitch: {
    type: BooleanConstructor
    default: boolean
  }
  /**
   * 快捷选项，为对象数组，其中对象的 text 必传
   */
  shortcuts: {
    type: PropType<Record<string, any>[]>
    default: () => never[]
  }
  /**
   * 快捷操作点击回调
   */
  onShortcutsClick: PropType<CalendarOnShortcutsClick>
  /**
   * 弹出面板是否设置底部安全距离（iphone X 类型的机型）
   */
  safeAreaInsetBottom: {
    type: BooleanConstructor
    default: boolean
  }
  /**
   * 确定前校验函数，接收 { value, resolve } 参数，通过 resolve 继续执行，resolve 接收 1 个 boolean 参数
   */
  beforeConfirm: PropType<CalendarBeforeConfirm>
  /**
   * 表单域 model 字段名，在使用表单校验功能的情况下，该属性是必填的
   */
  prop: StringConstructor
  /**
   * 表单验证规则，结合wd-form组件使用
   */
  rules: {
    type: PropType<FormItemRule[]>
    default: () => never[]
  }
  customViewClass: {
    type: PropType<string>
    default: string
  }
  /**
   * label 外部自定义样式
   */
  customLabelClass: {
    type: PropType<string>
    default: string
  }
  /**
   * value 外部自定义样式
   */
  customValueClass: {
    type: PropType<string>
    default: string
  }
  /**
   * 是否在手指松开时立即触发picker-view的 change 事件。若不开启则会在滚动动画结束后触发 change 事件，1.2.25版本起提供，仅微信小程序和支付宝小程序支持。
   */
  immediateChange: {
    type: BooleanConstructor
    default: boolean
  }
  /**
   * 打开前执行的函数
   */
  initFun: PropType<() => void>
  /**
   * 是否使用内置单元格
   * 默认为 true，使用内置单元格
   */
  withCell: {
    type: BooleanConstructor
    default: boolean
  }
  /**
   * type 为 daterange 或 datetimerange 时有效，默认选中的天数
   * 当传入该参数时，用户点击开始日期后会自动选中结束日期（开始日期 + defaultDays 天）
   */
  defaultDays: NumberConstructor
  customStyle: {
    type: PropType<string>
    default: string
  }
  customClass: {
    type: PropType<string>
    default: string
  }
}
export type CalendarDisplayFormat = (value: number | number[], type: CalendarType) => string
export type CalendarInnerDisplayFormat = (
  value: number,
  rangeType: 'start' | 'end',
  type: CalendarType,
) => string
export type CalendarBeforeConfirmOption = {
  value: number | number[] | null
  resolve: (isPass: boolean) => void
}
export type CalendarBeforeConfirm = (option: CalendarBeforeConfirmOption) => void
export type CalendarOnShortcutsClickOption = {
  item: Record<string, any>
  index: number
}
export type CalendarOnShortcutsClick = (option: CalendarOnShortcutsClickOption) => number | number[]
export type CalendarExpose = {
  /** 关闭时间选择器弹窗 */
  close: () => void
  /** 打开时间选择器弹窗 */
  open: () => void
}
export type CalendarProps = ExtractPropTypes<typeof calendarProps>
export type CalendarInstance = ComponentPublicInstance<CalendarExpose, CalendarProps>
