import React, { ReactNode } from 'react'
import { TimeInfo } from '@livelybone/date-generator'
import { ReactPopperProps } from '@livelybone/react-popper'
import { ScrollBarProps } from 'react-perfect-scrollbar'

declare enum DatePickerType {
  Year = 'year',
  Month = 'month',
  Date = 'date',
  Time = 'time',
}
declare enum TimePickerType {
  Second = 'second',
  Minute = 'minute',
  Hour = 'hour',
}
declare enum Compare {
  GreaterThan = 1,
  Equal = 0,
  LessThan = -1,
}
interface CommonProps {
  id?: string
  placeholder?: string
  min?: string
  max?: string
  readonly?: boolean
  popperProps?: ReactPopperProps
  clearIcon?: ReactNode
  preIcon?: ReactNode
  confirmBtnStr?: ReactNode
  onError?(err: Error): void
}
declare const DatePickerTypeRef: {
  time: {
    placeholder: string
  }
  date: {
    placeholder: string
  }
  month: {
    placeholder: string
  }
  year: {
    placeholder: string
  }
}
interface DatePickerProps extends CommonProps {
  value?: string
  type?: DatePickerType.Date | DatePickerType.Month | DatePickerType.Year
  dayStr?: ReactNode[]
  multiple?: boolean
  onChange?(val: string): void
}
interface TimePinRefProps {
  onConfirm(): Promise<TimeInfo>
  updateScroll(): void
}
interface TimePickerProps extends CommonProps {
  value?: string
  type?: TimePickerType
  timeStr?: ReactNode[]
  scrollBarProps?: ScrollBarProps
  onChange?(val: string): void
}
interface DateRangePickerProps extends CommonProps {
  value?: [string, string]
  secondPlaceholder?: string
  type?: DatePickerType
  dayStr?: ReactNode[]
  rangeSeparator?: ReactNode
  onSelectStartDate?(val: string): void
  onChange?(val: [string, string]): void
}
interface DatetimePickerProps extends CommonProps {
  value?: string
  dayStr?: ReactNode[]
  timeStr?: ReactNode[]
  scrollBarProps?: ScrollBarProps
  onChange?(val: string): void
}

declare const DatePicker: React.FC<DatePickerProps>

declare const DateRangePicker: React.FC<DateRangePickerProps>

declare const DatetimePicker: React.FC<DatetimePickerProps>

declare const TimePicker: React.FC<TimePickerProps>

export {
  CommonProps,
  Compare,
  DatePicker,
  DatePickerProps,
  DatePickerType,
  DatePickerTypeRef,
  DateRangePicker,
  DateRangePickerProps,
  DatetimePicker,
  DatetimePickerProps,
  TimePicker,
  TimePickerProps,
  TimePickerType,
  TimePinRefProps,
}
