import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
/** @jsx jsx */
import { useEffect, useMemo, useState } from 'react';
import { css, jsx } from '@emotion/react';
import debounce from 'lodash/debounce';
import { CustomThemeButton } from '@atlaskit/button';
import { akEditorUnitZIndex } from '@atlaskit/editor-shared-styles';
import CommentIcon from '@atlaskit/icon/glyph/comment';
import { layers } from '@atlaskit/theme/constants';
import Tooltip from '@atlaskit/tooltip';
import { commentMessages as messages } from '../media';
var commentBadgeWrapper = css({
  position: 'absolute',
  // closest parent element with position relative is .resizer-hover-zone, which includes 10px padding
  right: '2px',
  top: '2px',
  borderRadius: '3px',
  zIndex: akEditorUnitZIndex * 10
});
var commentBadgeEditorOverrides = css({
  right: '14px',
  zIndex: layers.card()
});
var getBadgeSize = function getBadgeSize(width, height) {
  // width is the original width of image, not resized or currently rendered to user. Defaulting to medium for now
  return width && width < 70 || height && height < 70 ? 'small' : 'medium';
};
export var CommentBadge = function CommentBadge(_ref) {
  var intl = _ref.intl,
    width = _ref.width,
    height = _ref.height,
    _ref$status = _ref.status,
    status = _ref$status === void 0 ? 'default' : _ref$status,
    mediaElement = _ref.mediaElement,
    onClick = _ref.onClick,
    onMouseEnter = _ref.onMouseEnter,
    onMouseLeave = _ref.onMouseLeave,
    _ref$isEditor = _ref.isEditor,
    isEditor = _ref$isEditor === void 0 ? false : _ref$isEditor;
  var _useState = useState(getBadgeSize(width, height)),
    _useState2 = _slicedToArray(_useState, 2),
    badgeSize = _useState2[0],
    setBadgeSize = _useState2[1];
  var title = intl.formatMessage(messages.viewCommentsOnMedia);
  useEffect(function () {
    var observer = new ResizeObserver(debounce(function (entries) {
      var _entries = _slicedToArray(entries, 1),
        entry = _entries[0];
      var _entry$contentRect = entry.contentRect,
        width = _entry$contentRect.width,
        height = _entry$contentRect.height;
      setBadgeSize(getBadgeSize(width, height));
    }));
    if (mediaElement) {
      observer.observe(mediaElement);
    }
    return function () {
      observer.disconnect();
    };
  }, [mediaElement]);
  var badgeDimensions = badgeSize === 'medium' ? '24px' : '16px';
  var colourToken = useMemo(function () {
    switch (status) {
      case 'active':
        return "var(--ds-background-accent-yellow-subtlest-pressed, #F5CD47)";
      case 'entered':
        return "var(--ds-background-accent-yellow-subtlest-hovered, #F8E6A0)";
      default:
        return "var(--ds-background-accent-yellow-subtlest, #FFF7D6)";
    }
  }, [status]);
  return jsx("div", {
    css: isEditor ? [commentBadgeWrapper, commentBadgeEditorOverrides] : commentBadgeWrapper
    // This is needed so that mediaWrapperStyle in editor/editor-common/src/ui/MediaSingle/styled.tsx
    // can target the correct div
    ,
    "data-comment-badge": "true"
  }, jsx(Tooltip, {
    position: "top",
    content: title
  }, jsx(CustomThemeButton, {
    style: {
      height: badgeDimensions,
      width: badgeDimensions,
      background: colourToken,
      display: 'flex',
      justifyContent: 'center',
      alignItems: 'center'
    },
    onClick: onClick,
    onMouseEnter: onMouseEnter,
    onMouseLeave: onMouseLeave,
    iconAfter: jsx(CommentIcon, {
      label: title,
      size: badgeSize
    })
  })));
};