import type { ExtractPropTypes } from 'vue'
import type { collapseProps, $constants } from '@/collapse/src'
import type { ISharedRenderlessFunctionParams, ISharedRenderlessParamUtils } from './shared.type'
import type { setActiveNames, handleItemClick } from '../src/collapse'

export type ICollapseProps = ExtractPropTypes<typeof collapseProps>

export type ICollapseConstants = typeof $constants

export interface ICollapseState {
  activeNames: Array<string>
}

export type ICollapseRenderlessParams = ISharedRenderlessFunctionParams<ICollapseConstants> & {
  api: ICollapseApi
  state: ICollapseState
  props: ICollapseProps
  constants: ICollapseConstants
}

export interface ICollapseApi {
  state: ICollapseState
  setActiveNames: ReturnType<typeof setActiveNames>
  handleItemClick: ReturnType<typeof handleItemClick>
}

export type ICollapseRenderlessParamUtils = ISharedRenderlessParamUtils<ICollapseConstants>