import React, { useState } from 'react';
import classnames from 'classnames';
import PropTypes from 'prop-types';
import Button from '../../ui/button';
import Checkbox from '../../ui/check-box';
import Tooltip from '../../ui/tooltip';

const HomeNotification = ({
  acceptText,
  checkboxText,
  checkboxTooltipText,
  classNames = [],
  descriptionText,
  ignoreText,
  infoText,
  onAccept,
  onIgnore,
}) => {
  const [checkboxState, setCheckBoxState] = useState(false);

  const checkboxElement = checkboxText && (
    <Checkbox
      id="homeNotification_checkbox"
      checked={checkboxState}
      className="home-notification__checkbox"
      onClick={() => setCheckBoxState((checked) => !checked)}
    />
  );

  return (
    <div className={classnames('home-notification', ...classNames)}>
      <div className="home-notification__content">
        <div className="home-notification__content-container">
          <div className="home-notification__text">{descriptionText}</div>
        </div>
        {infoText ? (
          <Tooltip
            position="top"
            title={infoText}
            wrapperClassName="home-notification__tooltip-wrapper"
          >
            <i className="fa fa-info-circle" />
          </Tooltip>
        ) : null}
      </div>
      <div className="home-notification__buttons">
        {onAccept && acceptText ? (
          <Button
            type="primary"
            className="home-notification__accept-button"
            onClick={onAccept}
          >
            {acceptText}
          </Button>
        ) : null}
        {onIgnore && ignoreText ? (
          <Button
            type="secondary"
            className="home-notification__ignore-button"
            // Some onIgnore handlers use the checkboxState to determine whether
            // to disable the notification
            onClick={() => onIgnore(checkboxState)}
          >
            {ignoreText}
          </Button>
        ) : null}
        {checkboxText ? (
          <div className="home-notification__checkbox-wrapper">
            {checkboxTooltipText ? (
              <Tooltip
                position="top"
                title={checkboxTooltipText}
                wrapperClassName="home-notification__checkbox-label-tooltip"
              >
                {checkboxElement}
              </Tooltip>
            ) : (
              checkboxElement
            )}
            <label
              className="home-notification__checkbox-label"
              htmlFor="homeNotification_checkbox"
            >
              {checkboxText}
            </label>
          </div>
        ) : null}
      </div>
    </div>
  );
};

HomeNotification.propTypes = {
  acceptText: PropTypes.node,
  checkboxText: PropTypes.node,
  checkboxTooltipText: PropTypes.node,
  classNames: PropTypes.array,
  descriptionText: PropTypes.node.isRequired,
  ignoreText: PropTypes.node,
  infoText: PropTypes.node,
  onAccept: PropTypes.func,
  onIgnore: PropTypes.func,
};

export default HomeNotification;