import type { CSSProperties, ExtractPropTypes } from 'vue'
import type { actionSheetProps } from '@/action-sheet/src'
import type { ISharedRenderlessParamUtils } from './shared.type'

export interface IActionSheetState {
  toggle: boolean
  sheetMaskStyle: CSSProperties
  sheetContentStyle: CSSProperties
  scroll: null | object
}

export type IActionSheetProps = ExtractPropTypes<typeof actionSheetProps>

export type IActionSheetRenderlessParamUtils = ISharedRenderlessParamUtils<null>

export interface IActionSheetApi {
  state: IActionSheetState
  setSheetStyle: ({ state, props }: { state: IActionSheetState; props: IActionSheetProps }) => void
  initScrollMenu: ({
    state,
    nextTick,
    refs,
    BScroll
  }: {
    state: IActionSheetState
    nextTick: IActionSheetRenderlessParamUtils['nextTick']
    refs: IActionSheetRenderlessParamUtils['refs']
    BScroll: object
  }) => void
  visibleHandle: ({ emit, state }: { emit: IActionSheetRenderlessParamUtils['emit']; state: IActionSheetState }) => void
  watchVisible: (value: boolean) => void
  menuHandle: (item: any) => void
  confirm: () => void
  selectOption: (option: any) => void
  actionSelectOption: (option: any, index: any) => void
  close: () => void
  hide: () => void
}