// eslint-disable-next-line import/no-extraneous-dependencies
import Vue from 'vue'
import { GntCalendarOptions } from '@livelybone/date-generator'
import { VuePopperProps } from '@livelybone/vue-popper'
import { VueScrollbarProps } from 'vue-scrollbar-live'

declare class CommonProps extends Vue {
  /**
   * Id of input element
   * */
  id?: string | number

  placeholder?: string

  min?: string

  max?: string

  canEdit?: boolean

  inputStyle?: CSSStyleDeclaration | string

  /**
   * Props of module [@livelybone/vue-popper](https://github.com/livelybone/vue-popper)
   *
   * Default to：
   * {
   *   arrowPosition: 'start',
   *   arrowOffsetScaling: 1,
   *   popperOptions: {
   *     placement: 'bottom-start',
   *     modifiers: {
   *       preventOverflow: {
   *         boundariesElement:
   *           typeof document !== 'undefined' ? document.body : '',
   *       },
   *     },
   *   },
   * }
   * */
  popperProps?: VuePopperProps

  /**
   * Props of scrollbar, see [vue-scrollbar-live](https://github.com/livelybone/vue-scrollbar-live)
   *
   * Default to: { isMobile: false, maxHeight: 200 }
   * */
  scrollbarProps?: VueScrollbarProps
}

declare class Datepicker extends CommonProps {
  value?: string

  /**
   * Options: 'year', 'month', 'date'
   *
   * Default: 'date'
   * */
  type?: string

  /**
   * Used to set day name
   *
   * Default to:
   * ['日', '一', '二', '三', '四', '五', '六']
   * */
  dayStr?: string[]

  firstDayOfWeek?: GntCalendarOptions['firstDayOfWeek']

  multiple: boolean

  /**
   * Used to set text of button
   *
   * Default to: '确定'
   * */
  btnStr: string
}

declare class DateRangePicker extends CommonProps {
  value?: [string, string] | [string] | []

  /**
   * Options: 'year', 'month', 'date'
   *
   * Default: 'date'
   * */
  type?: string

  /**
   * Used to set day name
   *
   * Default to:
   * ['日', '一', '二', '三', '四', '五', '六']
   * */
  dayStr?: string[]

  firstDayOfWeek?: GntCalendarOptions['firstDayOfWeek']

  rangeSeparator?: string

  secondPlaceholder?: string
}

declare class Timepicker extends CommonProps {
  value?: string

  /**
   * Options: 'hour', 'minute', 'second'
   *
   * Default: 'second'
   * */
  type?: string

  /**
   * Used to set time name
   *
   * Default to: ['时', '分', '秒']
   * */
  timeStr?: string[]

  /**
   * Used to set text of button
   *
   * Default to: '确定'
   * */
  btnStr?: string
}

declare class DatetimePicker extends CommonProps {
  value?: string

  /**
   * Used to set day name. Start with Sunday
   *
   * Default to: ['日', '一', '二', '三', '四', '五', '六']
   * */
  dayStr?: string[]

  firstDayOfWeek?: GntCalendarOptions['firstDayOfWeek']

  /**
   * Used to set time name
   *
   * Default to: ['时', '分', '秒']
   * */
  timeStr?: string[]

  /**
   * Used to set text of button
   *
   * Default to: '确定'
   * */
  btnStr?: string

  /**
   * Options: 'hour', 'minute', 'second'
   *
   * Default to: 'second'
   * */
  timeType?: string
}

/**
 * Svg icon
 * */
declare class IconDate extends Vue {}

/**
 * Svg icon
 * */
declare class IconTime extends Vue {}

export {
  Datepicker,
  DateRangePicker,
  Timepicker,
  DatetimePicker,
  IconTime,
  IconDate,
}
