// Copyright 2024 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only

import type { JSX } from 'react';

import type { ConversationType } from '../state/ducks/conversations.preload.ts';
import type { LocalizerType } from '../types/I18N.std.ts';
import { Button, ButtonVariant } from './Button.dom.tsx';
import { Modal } from './Modal.dom.tsx';
import { Linkify } from './conversation/Linkify.dom.tsx';
import type { RenderTextCallbackType } from '../types/Util.std.ts';
import { Emojify } from './conversation/Emojify.dom.tsx';

export type NotePreviewModalProps = Readonly<{
  conversation: ConversationType;
  i18n: LocalizerType;
  onClose: () => void;
  onEdit: () => void;
}>;

const renderNonLink: RenderTextCallbackType = ({ key, text }) => {
  return <Emojify key={key} text={text} />;
};

export function NotePreviewModal({
  conversation,
  i18n,
  onClose,
  onEdit,
}: NotePreviewModalProps): JSX.Element {
  return (
    <Modal
      modalName="NotePreviewModal"
      i18n={i18n}
      title={i18n('icu:NotePreviewModal__Title')}
      onClose={onClose}
      hasXButton
      modalFooter={
        <>
          <Button onClick={onEdit} variant={ButtonVariant.Secondary}>
            {i18n('icu:edit')}
          </Button>
          <Button onClick={onClose} variant={ButtonVariant.Primary}>
            {i18n('icu:done')}
          </Button>
        </>
      }
    >
      <div dir="auto">
        <Linkify text={conversation.note ?? ''} renderNonLink={renderNonLink} />
      </div>
    </Modal>
  );
}
