import _extends from "@babel/runtime/helpers/extends";
import React, { useCallback, useMemo } from 'react';
import { useIntl } from 'react-intl-next';
import { InternalActionName } from '../../../../../constants';
import { messages } from '../../../../../messages';
import { useFlexibleUiContext } from '../../../../../state/flexible-ui-context';
import useInvokeClientAction from '../../../../../state/hooks/use-invoke-client-action';
import useRovoChat from '../../../../../state/hooks/use-rovo-chat';
import AiChapterIcon from '../../../assets/ai-chapter-icon';
import AIEditIcon from '../../../assets/ai-edit-icon';
import AISearchIcon from '../../../assets/ai-search-icon';
import Action from '../action';
import htmlToAdf from './html-to-adf';
export let RovoChatPromptKey = /*#__PURE__*/function (RovoChatPromptKey) {
  RovoChatPromptKey["RECOMMEND_OTHER_SOURCES"] = "recommend-other-sources";
  RovoChatPromptKey["SHOW_OTHER_MENTIONS"] = "show-other-mentions";
  RovoChatPromptKey["SUGGEST_IMPROVEMENT"] = "suggest-improvement";
  return RovoChatPromptKey;
}({});
const DEFAULT_PROMPTS = [RovoChatPromptKey.RECOMMEND_OTHER_SOURCES, RovoChatPromptKey.SHOW_OTHER_MENTIONS, RovoChatPromptKey.SUGGEST_IMPROVEMENT];
const getContext = (intl, product) => {
  switch (product) {
    case 'CONFLUENCE':
      return {
        contextLong: intl.formatMessage(messages.rovo_prompt_context_confluence_page),
        contextShort: intl.formatMessage(messages.rovo_prompt_context_confluence_page_short)
      };
    case 'JSW':
    case 'JWM':
    case 'JSM':
    case 'JPD':
      return {
        contextLong: intl.formatMessage(messages.rovo_prompt_context_jira_work_item),
        contextShort: intl.formatMessage(messages.rovo_prompt_context_jira_work_item_short)
      };
  }
};
const getPromptAction = (promptKey, intl, url = '', product) => {
  var _getContext;
  const {
    contextLong,
    contextShort
  } = (_getContext = getContext(intl, product)) !== null && _getContext !== void 0 ? _getContext : {
    contextLong: intl.formatMessage(messages.rovo_prompt_context_generic),
    contextShort: intl.formatMessage(messages.rovo_prompt_context_generic)
  };
  switch (promptKey) {
    case RovoChatPromptKey.RECOMMEND_OTHER_SOURCES:
      const label_recommend = intl.formatMessage(messages.rovo_prompt_button_recommend_other_sources);
      const html_recommend = intl.formatMessage(messages.rovo_prompt_message_recommend_other_sources, {
        context: contextLong,
        url
      }, {
        ignoreTag: true
      });
      return {
        icon: /*#__PURE__*/React.createElement(AIEditIcon, null),
        content: label_recommend,
        tooltipMessage: label_recommend,
        data: {
          name: label_recommend,
          dialogues: [],
          prompt: htmlToAdf(html_recommend)
        }
      };
    case RovoChatPromptKey.SHOW_OTHER_MENTIONS:
      const label_other_mentions = intl.formatMessage(messages.rovo_prompt_button_show_other_mentions);
      const html_other_mentions = intl.formatMessage(messages.rovo_prompt_message_show_other_mentions, {
        context: contextLong,
        url
      }, {
        ignoreTag: true
      });
      return {
        icon: /*#__PURE__*/React.createElement(AiChapterIcon, null),
        content: label_other_mentions,
        tooltipMessage: label_other_mentions,
        data: {
          name: label_other_mentions,
          dialogues: [],
          prompt: htmlToAdf(html_other_mentions)
        }
      };
    case RovoChatPromptKey.SUGGEST_IMPROVEMENT:
      const label_improvement = intl.formatMessage(messages.rovo_prompt_button_suggest_improvement, {
        context: contextShort
      });
      const html_improvement = intl.formatMessage(messages.rovo_prompt_message_suggest_improvement, {
        context: contextLong,
        url
      }, {
        ignoreTag: true
      });
      return {
        icon: /*#__PURE__*/React.createElement(AISearchIcon, null),
        content: label_improvement,
        tooltipMessage: label_improvement,
        data: {
          name: label_improvement,
          dialogues: [],
          prompt: htmlToAdf(html_improvement)
        }
      };
  }
};
const RovoChatAction = ({
  onClick: onClickCallback,
  prompts = DEFAULT_PROMPTS,
  testId = 'smart-action-rovo-chat-action',
  ...props
}) => {
  var _context$actions;
  const intl = useIntl();
  const {
    isRovoChatEnabled,
    sendPromptMessage
  } = useRovoChat();
  const context = useFlexibleUiContext();
  const data = context === null || context === void 0 ? void 0 : (_context$actions = context.actions) === null || _context$actions === void 0 ? void 0 : _context$actions[InternalActionName.RovoChatAction];
  const invoke = useInvokeClientAction({});
  const onClick = useCallback((promptData, promptKey) => {
    if (promptData && data !== null && data !== void 0 && data.invokeAction) {
      invoke({
        ...(data === null || data === void 0 ? void 0 : data.invokeAction),
        actionFn: async () => sendPromptMessage(promptData),
        prompt: promptKey
      });
      onClickCallback === null || onClickCallback === void 0 ? void 0 : onClickCallback();
    }
  }, [data === null || data === void 0 ? void 0 : data.invokeAction, invoke, onClickCallback, sendPromptMessage]);
  const promptActions = useMemo(() => {
    return prompts.map((promptKey, idx) => {
      const {
        icon,
        content,
        tooltipMessage,
        data: promptData
      } = getPromptAction(promptKey, intl, data === null || data === void 0 ? void 0 : data.url, data === null || data === void 0 ? void 0 : data.product) || {};
      return promptData ? /*#__PURE__*/React.createElement(Action, _extends({
        content: content,
        icon: icon,
        key: promptKey,
        onClick: () => onClick(promptData, promptKey),
        testId: `${testId}-${idx + 1}`,
        tooltipMessage: tooltipMessage
      }, props)) : null;
    });
  }, [data, intl, onClick, prompts, props, testId]);
  return isRovoChatEnabled && data && (promptActions === null || promptActions === void 0 ? void 0 : promptActions.length) > 0 ? /*#__PURE__*/React.createElement(React.Fragment, null, promptActions) : null;
};
export default RovoChatAction;