import React from 'react'
import classNames from 'classnames'
import propTypes from 'prop-types'

import { Icon } from '@swrve/icons'

class Chip extends React.Component {
  render() {
    const { children, className, id, theme, onDelete, innerRef, ...rest } = this.props

    const isLightTheme = theme === 'cloudWhite'

    const rootChipClassname = classNames(
      'sw-chip rounded-full text-xs inline-block relative',
      {
        'cursor-pointer': onDelete,
        'text-cloudWhite': !isLightTheme,
        'text-jungleBlack border border-bombayGrey': isLightTheme
      },
      'max-w-full',
      [`bg-${theme}-100`],
      className
    )
    const iconClassname = classNames(
      'sw-chip-button cursor-pointer mr-1 align-middle focus:outline-none h-4',
      {
        'cursor-pointer': onDelete,
        'text-bombayGrey hover:text-jungleBlack focus:text-jungleBlack': isLightTheme,
        [`text-${theme}-50 hover:text-cloudWhite focus:text-cloudWhite`]: !isLightTheme
      }
    )
    const labelClassnames = classNames(
      'flex items-center align-middle whitespace-no-wrap select-none truncate',
      {
        'px-3': !onDelete,
        'pl-3 pr-2': onDelete
      }
    )

    const handleDeleteClick = event => {
      onDelete(event, id)
    }

    const handleKeyPress = event => {
      // Delete Key
      if (event.keyCode === 8) {
        onDelete(event, id)
      }
    }

    return (
      <div ref={innerRef} className={rootChipClassname} contentEditable={false}>
        <span {...rest} className={labelClassnames}>
          {children}
        </span>
        {onDelete && (
          <button className={iconClassname} onClick={handleDeleteClick} onKeyDown={handleKeyPress}>
            <Icon name="cancel" />
          </button>
        )}
      </div>
    )
  }
}

Chip.displayName = 'Chip'

Chip.propTypes = {
  /** InnerRef  */
  innerRef: propTypes.func,
  /** Prop type description */
  children: propTypes.node,
  /** Extra CSS custom classes */
  className: propTypes.string,
  /** Callback triggered on delete click event */
  onDelete: propTypes.func,
  /** Determines main style */
  theme: propTypes.oneOf([
    'primary',
    'secondary',
    'warning',
    'radicalRed',
    'dodgerBlue',
    'pictonBlue',
    'javaGreen',
    'limaGreen',
    'frenchRoseRed',
    'sunglowYellow',
    'electricViolet',
    'royalBlue',
    'lazyLavender',
    'orangePeel',
    'cloudWhite'
  ])
}

Chip.defaultProps = {
  theme: 'secondary'
}

export default Chip
