import React from 'react';
import PropTypes from 'prop-types';
import classnames from 'classnames';
import Box from '../../ui/box';
import {
  AlignItems,
  Color,
  IconColor,
  JustifyContent,
  Size,
  TextColor,
  TextVariant,
} from '../../../helpers/constants/design-system';
import {
  AvatarIcon,
  Text,
  Icon,
  IconName,
  IconSize,
} from '../../component-library';
import { formatDate } from '../../../helpers/utils/util';
import { useI18nContext } from '../../../hooks/useI18nContext';
import Tooltip from '../../ui/tooltip';

const PermissionCell = ({
  title,
  description,
  weight,
  avatarIcon,
  dateApproved,
  revoked,
}) => {
  const t = useI18nContext();

  let infoIconColor = IconColor.iconMuted;
  let infoIcon = IconName.Info;
  let iconColor = IconColor.primaryDefault;
  let iconBackgroundColor = Color.primaryMuted;

  if (!revoked && weight === 1) {
    iconColor = IconColor.warningDefault;
    iconBackgroundColor = Color.warningMuted;
    infoIconColor = IconColor.warningDefault;
    infoIcon = IconName.Danger;
  }

  if (dateApproved) {
    iconColor = IconColor.iconMuted;
    iconBackgroundColor = Color.backgroundAlternative;
  }

  if (revoked) {
    iconColor = IconColor.iconMuted;
    iconBackgroundColor = Color.backgroundAlternative;
  }

  let permissionIcon = avatarIcon;
  if (typeof avatarIcon !== 'string' && avatarIcon?.props?.iconName) {
    permissionIcon = avatarIcon.props.iconName;
  }

  return (
    <Box
      className="permission-cell"
      justifyContent={JustifyContent.center}
      alignItems={AlignItems.flexStart}
      marginLeft={4}
      marginRight={4}
      paddingTop={2}
      paddingBottom={2}
    >
      <Box>
        {typeof permissionIcon === 'string' ? (
          <AvatarIcon
            iconName={permissionIcon}
            size={IconSize.Md}
            iconProps={{
              size: IconSize.Sm,
            }}
            color={iconColor}
            backgroundColor={iconBackgroundColor}
          />
        ) : (
          permissionIcon
        )}
      </Box>
      <Box width="full" marginLeft={4} marginRight={4}>
        <Text
          size={Size.MD}
          variant={TextVariant.bodyMd}
          className={classnames('permission-cell__title', {
            'permission-cell__title-revoked': revoked,
          })}
        >
          {title}
        </Text>
        <Text
          className="permission-cell__status"
          variant={TextVariant.bodySm}
          color={TextColor.textAlternative}
        >
          {!revoked &&
            (dateApproved
              ? t('approvedOn', [formatDate(dateApproved, 'yyyy-MM-dd')])
              : t('permissionRequested'))}
          {revoked ? t('permissionRevoked') : ''}
        </Text>
      </Box>
      <Box>
        <Tooltip html={<div>{description}</div>} position="bottom">
          <Icon color={infoIconColor} name={infoIcon} size={IconSize.Sm} />
        </Tooltip>
      </Box>
    </Box>
  );
};

PermissionCell.propTypes = {
  title: PropTypes.oneOfType([
    PropTypes.string.isRequired,
    PropTypes.object.isRequired,
  ]),
  description: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),
  weight: PropTypes.number,
  avatarIcon: PropTypes.any.isRequired,
  dateApproved: PropTypes.number,
  revoked: PropTypes.bool,
};

export default PermissionCell;