/**
 * Copyright (c) 2022 - present TinyVue Authors.
 * Copyright (c) 2022 - present Huawei Cloud Computing Technologies Co., Ltd.
 *
 * Use of this source code is governed by an MIT-style license.
 *
 * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL,
 * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR
 * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS.
 *
 */
import type { IBadgeRenderlessParams, IBadgeContent } from '@/types'
import type { StyleValue } from 'vue'

export const computedContent =
  ({ props, state }: Pick<IBadgeRenderlessParams, 'props' | 'state'>) =>
  (): IBadgeContent =>
    (typeof props.value === 'number' || typeof props.value === 'string') && typeof props.max === 'number'
      ? props.max < Number(state.valueRef)
        ? `${props.max}+`
        : state.valueRef
      : state.valueRef

export const computedValueRef =
  ({ props }: Pick<IBadgeRenderlessParams, 'props'>) =>
  (): number | string | undefined => {
    if (typeof props.value === 'number' || typeof props.value === 'string') {
      return props.value
    } else {
      return undefined
    }
  }

export const computedTransform =
  ({ designConfig, props }: Pick<IBadgeRenderlessParams, 'designConfig' | 'props'>) =>
  (): StyleValue => {
    if (designConfig?.transform === 'unset') {
      return null
    }
    return {
      transform: `translate(
        ${props.offset[0]}${typeof props.offset[0] === 'number' ? 'px' : ''},
        ${props.offset[1]}${typeof props.offset[1] === 'number' ? 'px' : ''}
      )`
    }
  }