import type { ExtractPropTypes, ref } from 'vue'
import type { userContactProps } from '@/user-contact/src'
import type { ISharedRenderlessFunctionParams, ISharedRenderlessParamUtils } from './shared.type'
import type { getUserHref, doUserAction, initEspaceLink, openEspace } from '../src/user-contact'
import type { testUID } from '../src/espace'

export type IUserContactProps = ExtractPropTypes<typeof userContactProps>

export interface IUserContactState {
  initialized: boolean
}

export type IUserContactRenderlessParams = ISharedRenderlessFunctionParams<never> & {
  api: IUserContactApi
  state: IUserContactState
  props: IUserContactProps
}

export interface IUserContactApi {
  state: IUserContactState
  testUID: ReturnType<typeof testUID>
  show: ReturnType<typeof ref>
  getUserHref: ReturnType<typeof getUserHref>
  initEspaceLink: ReturnType<typeof initEspaceLink>
  doUserAction: ReturnType<typeof doUserAction>
  openEspace: ReturnType<typeof openEspace>
}

export type IUserContactRenderlessParamUtils = ISharedRenderlessParamUtils<never>