import type { GetRowKey, Key, RenderExpandIconProps } from '../interface'

export function renderExpandIcon<RecordType>({
  prefixCls,
  record,
  onExpand,
  expanded,
  expandable,
}: RenderExpandIconProps<RecordType>) {
  const expandClassName = `${prefixCls}-row-expand-icon`

  if (!expandable) {
    return <span class={[expandClassName, `${prefixCls}-row-spaced`]} />
  }

  const onClick = (event) => {
    onExpand(record, event)
    event.stopPropagation()
  }

  return (
    <span
      class={{
        [expandClassName]: true,
        [`${prefixCls}-row-expanded`]: expanded,
        [`${prefixCls}-row-collapsed`]: !expanded,
      }}
      onClick={onClick}
    />
  )
}

export function findAllChildrenKeys<RecordType>(
  data: readonly RecordType[],
  getRowKey: GetRowKey<RecordType>,
  childrenColumnName: string,
): Key[] {
  const keys: Key[] = []

  function dig(list: readonly RecordType[]) {
    ;(list || []).forEach((item, index) => {
      keys.push(getRowKey(item, index))

      dig((item as any)[childrenColumnName])
    })
  }

  dig(data)

  return keys
}
