import { FormattedMessage } from 'react-intl';

import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?react';
import ReplyIcon from '@/material-icons/400-24px/reply-fill.svg?react';
import type { StatusVisibility } from 'mastodon/api_types/statuses';
import type { NotificationGroupMention } from 'mastodon/models/notification_group';
import { useAppSelector } from 'mastodon/store';

import type { LabelRenderer } from './notification_group_with_status';
import { NotificationWithStatus } from './notification_with_status';

const labelRenderer: LabelRenderer = (values) => (
  <FormattedMessage
    id='notification.mention'
    defaultMessage='{name} mentioned you'
    values={values}
  />
);

const privateMentionLabelRenderer: LabelRenderer = (values) => (
  <FormattedMessage
    id='notification.private_mention'
    defaultMessage='{name} privately mentioned you'
    values={values}
  />
);

export const NotificationMention: React.FC<{
  notification: NotificationGroupMention;
  unread: boolean;
}> = ({ notification, unread }) => {
  const statusVisibility = useAppSelector(
    (state) =>
      state.statuses.getIn([
        notification.statusId,
        'visibility',
      ]) as StatusVisibility,
  );

  return (
    <NotificationWithStatus
      type='mention'
      icon={statusVisibility === 'direct' ? AlternateEmailIcon : ReplyIcon}
      iconId='reply'
      accountIds={notification.sampleAccountIds}
      count={notification.notifications_count}
      statusId={notification.statusId}
      labelRenderer={
        statusVisibility === 'direct'
          ? privateMentionLabelRenderer
          : labelRenderer
      }
      unread={unread}
    />
  );
};
