import type {
  ColorSelectPanelExtends,
  IColorSelectPanelProps,
  ISharedRenderlessParamHooks,
  ISharedRenderlessParamUtils
} from '@/types'
import { initApi, initState, initWatch, parseCustomRGBA } from './index'

export const api = [
  'state',
  'open',
  'close',
  'resetColor',
  'onConfirm',
  'onCancel',
  'submitValue',
  'clear',
  'onHueReady',
  'onSvReady',
  'onAlphaReady',
  'onPredefineColorClick',
  'onHistoryClick',
  'onClickOutside',
  'onInputBlur'
]

export const renderless = (
  props: IColorSelectPanelProps,
  hooks: ISharedRenderlessParamHooks,
  utils: ISharedRenderlessParamUtils,
  ext: ColorSelectPanelExtends
) => {
  const state = initState(props, hooks, utils, ext)
  const {
    open,
    close,
    resetColor,
    onConfirm,
    onCancel,
    submitValue,
    clear,
    onHueReady,
    onSvReady,
    onAlphaReady,
    onPredefineColorClick,
    onHistoryClick,
    onClickOutside,
    onInputBlur
  } = initApi(props, state, utils, hooks, ext)

  const api = {
    state,
    open,
    close,
    resetColor,
    onConfirm,
    onCancel,
    submitValue,
    clear,
    onHueReady,
    onSvReady,
    onAlphaReady,
    onPredefineColorClick,
    onHistoryClick,
    onClickOutside,
    onInputBlur
  }
  initWatch(state, props, hooks, utils)
  hooks.onMounted(() => {
    if (props.modelValue) {
      state.input = state.currentColor
      const result = parseCustomRGBA(state.currentColor, state.currentFormat) || [0, 0, 0, 0]
      state.hexInput4 = Math.ceil(Number(result[0]))
      state.hexInput5 = result[1]
      state.hexInput6 = result[2]
      state.hexInput7 = `${(Number(result[3]) || 1) * 100}%`
    }
  })
  return api
}