import React, { useContext } from 'react';
import PropTypes from 'prop-types';
import classnames from 'classnames';

import {
  Icon,
  IconName,
  IconSize,
} from '../../../components/component-library';
import { IconColor } from '../../../helpers/constants/design-system';
import UrlIcon from '../../../components/ui/url-icon';
import { I18nContext } from '../../../contexts/i18n';

export default function SelectedToken({
  onClick,
  onClose,
  selectedToken,
  testId,
}) {
  const t = useContext(I18nContext);
  const hasIcon = selectedToken?.iconUrl && selectedToken?.symbol;

  const onKeyUp = (e) => {
    if (e.key === 'Escape') {
      onClose();
    } else if (e.key === 'Enter') {
      onClick(e);
    }
  };

  return (
    <div
      className={classnames(
        'dropdown-search-list',
        'dropdown-search-list__selector-closed-container',
        'dropdown-input-pair__selector--closed',
      )}
      data-testid="dropdown-search-list"
      tabIndex="0"
      onClick={onClick}
      onKeyUp={onKeyUp}
    >
      <div className="dropdown-search-list__selector-closed">
        {hasIcon && (
          <UrlIcon
            url={selectedToken.iconUrl}
            className="dropdown-search-list__selector-closed-icon"
            name={selectedToken?.symbol}
          />
        )}
        <div
          className={classnames('dropdown-search-list__labels', {
            'dropdown-search-list__labels--with-icon': hasIcon,
          })}
        >
          <div className="dropdown-search-list__item-labels">
            <span
              data-testid={testId}
              className={classnames(
                'dropdown-search-list__closed-primary-label',
                {
                  'dropdown-search-list__select-default':
                    !selectedToken?.symbol,
                },
              )}
            >
              {selectedToken?.symbol || t('swapSelectAToken')}
            </span>
          </div>
        </div>
      </div>
      <Icon
        name={IconName.ArrowDown}
        size={IconSize.Xs}
        marginRight={3}
        color={IconColor.iconAlternative}
      />
    </div>
  );
}

SelectedToken.propTypes = {
  onClick: PropTypes.func.isRequired,
  onClose: PropTypes.func.isRequired,
  selectedToken: PropTypes.object.isRequired,
  testId: PropTypes.string,
};