import type { ExtractPropTypes, ComputedRef } from 'vue'
import type { amountProps } from '@/amount/src'
import type { ISharedRenderlessParamUtils } from './shared.type'

export interface IAmountState {
  visible: boolean
  amount: string
  currency: string
  date: string | Date | undefined
  overMaxLen: boolean
  isFocus: boolean
  lock: boolean
  amountText: string
  lastInput: string | number | undefined
  lastCurrency: number
  lastDate: string | Date | undefined
  format: ComputedRef<object>
}

export type IAmountEditorState = Pick<IAmountState, 'amount' | 'date' | 'currency' | 'lastInput'>

export type IAmountProps = ExtractPropTypes<typeof amountProps>

export type IAmountRenderlessParamUtils = ISharedRenderlessParamUtils<null>

export interface IAmountApi {
  state: IAmountState
  t: ISharedRenderlessParamUtils['t']
  editorState: IAmountEditorState
  getDecimal: (value: any) => any
  innerFormat: (value: any) => any
  getAmountText: (value: any) => any
  initAmount: () => any
  onInputPreprocess: (value: any) => any
  onInput: (value: any) => any
  initText: () => void
  inputFocus: () => void
  inputBlur: () => void
  closePopper: () => void
  emitChange: () => void
  popInput: (value: any) => void
  save: () => void
  reset: () => void
  handelClick: (e: any) => void
  addOutSideEvent: (visible: any) => void
  watchModelValue: () => void
  watchCurrency: (value: any) => void
  toggleVisible: () => void
}