/** @jsx jsx */
import { useEffect, 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 { commentMessages as messages } from '../media';
const 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
});
const commentBadgeEditorOverrides = css({
  right: '14px',
  zIndex: layers.card()
});
const 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 const CommentBadge = ({
  intl,
  width,
  height,
  mediaElement,
  onClick,
  isEditor = false
}) => {
  const [badgeSize, setBadgeSize] = useState(getBadgeSize(width, height));
  const title = intl.formatMessage(messages.viewAndAddCommentsOnMedia);
  useEffect(() => {
    const observer = new ResizeObserver(debounce(entries => {
      const [entry] = entries;
      const {
        width,
        height
      } = entry.contentRect;
      setBadgeSize(getBadgeSize(width, height));
    }));
    if (mediaElement) {
      observer.observe(mediaElement);
    }
    return () => {
      observer.disconnect();
    };
  }, [mediaElement]);
  const badgeDimensions = badgeSize === 'medium' ? '24px' : '16px';
  return jsx("div", {
    css: isEditor ? [commentBadgeWrapper, commentBadgeEditorOverrides] : commentBadgeWrapper
  }, jsx(CustomThemeButton, {
    style: {
      height: badgeDimensions,
      width: badgeDimensions,
      background: "var(--ds-background-accent-yellow-subtler, #F8E6A0)",
      display: 'flex',
      justifyContent: 'center',
      alignItems: 'center'
    },
    onClick: onClick,
    iconAfter: jsx(CommentIcon, {
      label: title,
      size: badgeSize
    })
  }));
};