import type * as React from 'react';
import { classNames } from '@vkontakte/vkjs';
import { resolveSpacingSize, type SpacingSizeProp } from '../../lib/spacings/sizes';
import type { HTMLAttributesWithRootRef } from '../../types';
import { RootComponent } from '../RootComponent/RootComponent';
import styles from './Spacing.module.css';

export const CUSTOM_CSS_TOKEN_FOR_USER_GAP = '--vkui_internal--spacing_size';

export interface SpacingProps extends HTMLAttributesWithRootRef<HTMLDivElement> {
  /**
   * Высота спэйсинга.
   *
   * Принимает значения дизайн-системы, числовые значения и css-переменные.
   */
  size?: SpacingSizeProp | undefined;
  /**
   * @deprecated 7.0.0.Будет удалeно в **VKUI v9**.
   */
  children?: React.ReactNode | undefined; // TODO [>=9]: удалить неиспользуемое свойство
}
/**
 * @see https://vkui.io/components/spacing
 */
export const Spacing = ({ size = 'm', ...restProps }: SpacingProps): React.ReactNode => {
  const [spacingSizeClassName, spacingSizeStyle] = resolveSpacingSize(
    CUSTOM_CSS_TOKEN_FOR_USER_GAP,
    size,
  );
  return (
    <RootComponent
      {...restProps}
      baseStyle={spacingSizeStyle}
      baseClassName={classNames(styles.host, spacingSizeClassName)}
    />
  );
};
