import _defineProperty from "@babel/runtime/helpers/defineProperty";
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
import "core-js/modules/es.symbol.js";
import "core-js/modules/es.array.filter.js";
import "core-js/modules/es.array.for-each.js";
import "core-js/modules/es.array.map.js";
import "core-js/modules/es.array.push.js";
import "core-js/modules/es.object.define-properties.js";
import "core-js/modules/es.object.define-property.js";
import "core-js/modules/es.object.get-own-property-descriptor.js";
import "core-js/modules/es.object.get-own-property-descriptors.js";
import "core-js/modules/es.object.keys.js";
import "core-js/modules/es.object.to-string.js";
import "core-js/modules/esnext.iterator.constructor.js";
import "core-js/modules/esnext.iterator.filter.js";
import "core-js/modules/esnext.iterator.for-each.js";
import "core-js/modules/web.dom-collections.for-each.js";
import React, { useMemo, useState } from 'react';
import { FcrIconType } from '../icon/type';
import { FcrDropMenu } from '../drop-menu';
import { FcrToolTip } from '../tooltip';
import { FcrIconButton } from '../icon-button';
import { useI18n } from '../../i18n';
import { FcrPopover } from '../popover';
import { IconText } from '../icon-text';
import { FcrSwitch } from '../switch';
import './index.css';

/** Room type (copied from core for ui-foundation independence). */
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
export var FcrRoomType = /*#__PURE__*/function (FcrRoomType) {
  FcrRoomType[FcrRoomType["Mainroom"] = 0] = "Mainroom";
  FcrRoomType[FcrRoomType["Subroom"] = 1] = "Subroom";
  FcrRoomType[FcrRoomType["Waitingroom"] = 2] = "Waitingroom";
  FcrRoomType[FcrRoomType["Interpreterroom"] = 3] = "Interpreterroom";
  FcrRoomType[FcrRoomType["JoinBeforeHostWaitingRoom"] = 4] = "JoinBeforeHostWaitingRoom";
  FcrRoomType[FcrRoomType["Infinityroom"] = 5] = "Infinityroom";
  return FcrRoomType;
}({});

/** Target user role for privilege (copied from core). */
export var FcrTargetUserType = /*#__PURE__*/function (FcrTargetUserType) {
  FcrTargetUserType[FcrTargetUserType["SELF"] = 1] = "SELF";
  FcrTargetUserType[FcrTargetUserType["HOST"] = 2] = "HOST";
  FcrTargetUserType[FcrTargetUserType["COHOST"] = 4] = "COHOST";
  FcrTargetUserType[FcrTargetUserType["PARTICIPANT"] = 8] = "PARTICIPANT";
  FcrTargetUserType[FcrTargetUserType["AUDIENCE"] = 16] = "AUDIENCE";
  return FcrTargetUserType;
}({});

/** Private chat privilege config (copied from core). */

/** Chat privilege config (copied from core). */

/** Single chat permission level (used for one panel or legacy single-level mode). */

/** Role key for per-role chat level (e.g. webinar guest vs audience). */

/** Chat level conditions by role. Use when room shows separate guest/audience menus. */

var ChatLevelOption = function ChatLevelOption(_ref) {
  var txt = _ref.txt,
    _ref$selected = _ref.selected,
    selected = _ref$selected === void 0 ? false : _ref$selected;
  return /*#__PURE__*/_jsx(IconText, {
    icon: FcrIconType.FCR_CHOOSEIT,
    txt: txt,
    colors: selected ? {
      iconPrimary: 'var(--fcr_ui_scene_icontext1)'
    } : {},
    classnames: selected ? {
      'fcr-icon-text--selected': true
    } : {}
  });
};
export var ChatManager = function ChatManager(_ref2) {
  var _allowChatLevelByRole, _allowChatLevelByRole2;
  var isManager = _ref2.isManager,
    setAllowChat = _ref2.setAllowChat,
    setAllowChatWithPayload = _ref2.setAllowChatWithPayload,
    setAllowChatByUserRole = _ref2.setAllowChatByUserRole,
    allowChatLevel = _ref2.allowChatLevel,
    _ref2$showArrow = _ref2.showArrow,
    showArrow = _ref2$showArrow === void 0 ? false : _ref2$showArrow,
    roomType = _ref2.roomType,
    allowChatLevelByRole = _ref2.allowChatLevelByRole,
    _ref2$showChatBubbles = _ref2.showChatBubbles,
    showChatBubbles = _ref2$showChatBubbles === void 0 ? true : _ref2$showChatBubbles,
    onShowChatBubblesChange = _ref2.onShowChatBubblesChange;
  var t = useI18n();
  var _useState = useState(false),
    _useState2 = _slicedToArray(_useState, 2),
    managerVisible = _useState2[0],
    setManagerVisible = _useState2[1];
  var guestLevel = (_allowChatLevelByRole = allowChatLevelByRole === null || allowChatLevelByRole === void 0 ? void 0 : allowChatLevelByRole.participant) !== null && _allowChatLevelByRole !== void 0 ? _allowChatLevelByRole : allowChatLevel;
  var audienceLevel = (_allowChatLevelByRole2 = allowChatLevelByRole === null || allowChatLevelByRole === void 0 ? void 0 : allowChatLevelByRole.audience) !== null && _allowChatLevelByRole2 !== void 0 ? _allowChatLevelByRole2 : allowChatLevel;
  var guestOptions = [{
    title: /*#__PURE__*/_jsx(ChatLevelOption, {
      txt: t('fmt_webinar_presenter_chat_permissions_everyone'),
      selected: guestLevel === 'everyone'
    }),
    key: 'everyone',
    onButtonClick: function onButtonClick() {
      if (guestLevel === 'everyone') return;
      if (setAllowChatByUserRole) {
        setAllowChatByUserRole({
          "public": true,
          "private": {
            host: true,
            cohost: true,
            participant: true
          }
        }, [FcrTargetUserType.PARTICIPANT]).then(function () {
          return setManagerVisible(false);
        });
      } else {
        setAllowChat === null || setAllowChat === void 0 || setAllowChat(true);
        setManagerVisible(false);
      }
    }
  }, {
    title: /*#__PURE__*/_jsx(ChatLevelOption, {
      txt: t('fmt_webinar_presenter_chat_permission_group_only'),
      selected: guestLevel === 'public'
    }),
    key: 'only_public',
    onButtonClick: function onButtonClick() {
      if (guestLevel === 'public') return;
      if (setAllowChatByUserRole) {
        setAllowChatByUserRole({
          "public": true,
          "private": {
            host: true,
            cohost: true,
            participant: false
          }
        }, [FcrTargetUserType.PARTICIPANT]).then(function () {
          return setManagerVisible(false);
        });
      } else {
        setAllowChatWithPayload === null || setAllowChatWithPayload === void 0 || setAllowChatWithPayload('public');
        setManagerVisible(false);
      }
    }
  }, {
    title: /*#__PURE__*/_jsx(ChatLevelOption, {
      txt: t('fmt_webinar_presenter_chat_permission_host_only'),
      selected: guestLevel === 'private_to_manager'
    }),
    key: 'private_to_manager',
    onButtonClick: function onButtonClick() {
      if (guestLevel === 'private_to_manager') return;
      if (setAllowChatByUserRole) {
        setAllowChatByUserRole({
          "public": false,
          "private": {
            host: true,
            cohost: true,
            participant: false
          }
        }, [FcrTargetUserType.PARTICIPANT]).then(function () {
          return setManagerVisible(false);
        });
      } else {
        setAllowChatWithPayload === null || setAllowChatWithPayload === void 0 || setAllowChatWithPayload('private_to_manager');
        setManagerVisible(false);
      }
    }
  }, {
    title: /*#__PURE__*/_jsx(ChatLevelOption, {
      txt: t('fmt_webinar_presenter_chat_permission_disabled'),
      selected: guestLevel === 'no_one'
    }),
    key: 'no_one',
    onButtonClick: function onButtonClick() {
      if (guestLevel === 'no_one') return;
      if (setAllowChatByUserRole) {
        setAllowChatByUserRole({
          "public": false,
          "private": {
            host: false,
            cohost: false,
            participant: false
          }
        }, [FcrTargetUserType.PARTICIPANT]).then(function () {
          return setManagerVisible(false);
        });
      } else {
        setAllowChat === null || setAllowChat === void 0 || setAllowChat(false);
        setManagerVisible(false);
      }
    }
  }];
  var audienceOptions = [{
    title: /*#__PURE__*/_jsx(ChatLevelOption, {
      txt: t('fmt_webinar_attendee_chat_permissions_everyone'),
      selected: audienceLevel === 'everyone'
    }),
    key: 'everyone',
    onButtonClick: function onButtonClick() {
      if (audienceLevel === 'everyone') return;
      if (setAllowChatByUserRole) {
        setAllowChatByUserRole({
          "public": true,
          "private": {
            host: true,
            cohost: true,
            participant: false
          }
        }, [FcrTargetUserType.AUDIENCE]).then(function () {
          return setManagerVisible(false);
        });
      } else {
        setAllowChat === null || setAllowChat === void 0 || setAllowChat(true);
        setManagerVisible(false);
      }
    }
  }, {
    title: /*#__PURE__*/_jsx(ChatLevelOption, {
      txt: t('fmt_webinar_attendee_chat_permissions_host_only'),
      selected: audienceLevel === 'private_to_manager'
    }),
    key: 'private_to_manager',
    onButtonClick: function onButtonClick() {
      if (audienceLevel === 'private_to_manager') return;
      if (setAllowChatByUserRole) {
        setAllowChatByUserRole({
          "public": false,
          "private": {
            host: true,
            cohost: true,
            participant: false
          }
        }, [FcrTargetUserType.AUDIENCE]).then(function () {
          return setManagerVisible(false);
        });
      } else {
        setAllowChatWithPayload === null || setAllowChatWithPayload === void 0 || setAllowChatWithPayload('private_to_manager');
        setManagerVisible(false);
      }
    }
  }, {
    title: /*#__PURE__*/_jsx(ChatLevelOption, {
      txt: t('fmt_webinar_attendee_chat_permissions_disabled'),
      selected: audienceLevel === 'no_one'
    }),
    key: 'no_one',
    onButtonClick: function onButtonClick() {
      if (audienceLevel === 'no_one') return;
      if (setAllowChatByUserRole) {
        setAllowChatByUserRole({
          "public": false,
          "private": {
            host: false,
            cohost: false,
            participant: false
          }
        }, [FcrTargetUserType.AUDIENCE]).then(function () {
          return setManagerVisible(false);
        });
      } else {
        setAllowChat === null || setAllowChat === void 0 || setAllowChat(false);
        setManagerVisible(false);
      }
    }
  }];
  var actions = [{
    title: /*#__PURE__*/_jsx(ChatLevelOption, {
      txt: t('fmt_chat_send_open'),
      selected: allowChatLevel === 'everyone'
    }),
    key: 'everyone',
    onButtonClick: function onButtonClick() {
      if (allowChatLevel === 'everyone') {
        return;
      }
      // 开放聊天
      setAllowChat === null || setAllowChat === void 0 || setAllowChat(true);
      setManagerVisible(false);
    }
  },
  // TODO: 环信暂不支持
  // {
  //   title: (
  //     <ChatLevelOption txt={t('chat_permission_public')} selected={allowChatLevel === 'public'} />
  //   ),
  //   key: 'public',
  //   onButtonClick: () => {
  //     if (allowChatLevel === 'public') {
  //       return;
  //     }
  //     setAllowChatWithPayload?.('public');
  //   },
  // },
  // {
  //   title: (
  //     <ChatLevelOption
  //       txt={t('fmt_additional_options_onlyprivatechat')}
  //       selected={allowChatLevel === 'private_to_manager'}
  //     />
  //   ),
  //   key: 'private_to_manager',
  //   onButtonClick: () => {
  //     if (allowChatLevel === 'private_to_manager') {
  //       return;
  //     }
  //     setAllowChatWithPayload?.('private_to_manager');
  //   },
  // },
  {
    title: /*#__PURE__*/_jsx(ChatLevelOption, {
      txt: t('fmt_chat_send_limit'),
      selected: allowChatLevel === 'no_one'
    }),
    key: 'no_one',
    onButtonClick: function onButtonClick() {
      if (allowChatLevel === 'no_one') {
        return;
      }
      // 全员禁言
      setAllowChat === null || setAllowChat === void 0 || setAllowChat(false);
      setManagerVisible(false);
    }
  }];
  var closePopover = function closePopover() {
    setManagerVisible(false);
  };
  var popoverContent = useMemo(function () {
    if (roomType === FcrRoomType.Infinityroom) {
      return /*#__PURE__*/_jsxs("div", {
        onClick: function onClick(e) {
          return e.stopPropagation();
        },
        className: "fcr_chat_drop_menu fcr_chat_drop_menu_dual fcr_chat_settings_tooltip",
        children: [/*#__PURE__*/_jsx("div", {
          className: "fcr_chat_settings_header",
          children: t('fmt_chat_setting_title')
        }), /*#__PURE__*/_jsx("div", {
          className: "fcr_chat_settings_divider"
        }), /*#__PURE__*/_jsx(FcrDropMenu, {
          title: t('fmt_webinar_presenter_chat_permissions'),
          options: guestOptions.map(function (data) {
            return _objectSpread(_objectSpread({}, data), {}, {
              classNames: (data.key === 'only_public' ? guestLevel === 'public' : guestLevel === data.key) ? 'fcr-drop-menu-option-primary-selected' : ''
            });
          })
        }), /*#__PURE__*/_jsx("div", {
          className: "fcr_chat_settings_divider"
        }), /*#__PURE__*/_jsx(FcrDropMenu, {
          title: t('fmt_webinar_attendee_chat_permissions'),
          options: audienceOptions.map(function (data) {
            return _objectSpread(_objectSpread({}, data), {}, {
              classNames: audienceLevel === data.key ? 'fcr-drop-menu-option-primary-selected' : ''
            });
          })
        }), /*#__PURE__*/_jsx("div", {
          className: "fcr_chat_settings_divider"
        }), /*#__PURE__*/_jsxs("div", {
          className: "fcr_chat_settings_bubbles",
          children: [/*#__PURE__*/_jsx("span", {
            className: "fcr_chat_settings_bubbles_label",
            children: t('fmt_chat_label_show_bubble_tips')
          }), /*#__PURE__*/_jsx("div", {
            className: "fcr_chat_settings_switch",
            children: /*#__PURE__*/_jsx(FcrSwitch, {
              value: showChatBubbles,
              onChange: function onChange(v) {
                onShowChatBubblesChange === null || onShowChatBubblesChange === void 0 || onShowChatBubblesChange(v);
              },
              labels: {
                on: 'ON',
                off: 'OFF'
              }
            })
          })]
        })]
      });
    }
    return /*#__PURE__*/_jsx("div", {
      onClick: closePopover,
      className: "fcr_chat_drop_menu",
      children: /*#__PURE__*/_jsx(FcrDropMenu, {
        title: t('fmt_chat_setting_value'),
        options: actions.map(function (data) {
          return _objectSpread(_objectSpread({}, data), {}, {
            classNames: allowChatLevel === data.key ? 'fcr-drop-menu-option-primary-selected' : ''
          });
        })
      })
    });
  }, [allowChatLevel, allowChatLevelByRole, setAllowChatByUserRole, setAllowChat, setAllowChatWithPayload, guestLevel, audienceLevel, actions, roomType, showChatBubbles, onShowChatBubblesChange, t]);
  if (!isManager) return null;
  return /*#__PURE__*/_jsx("div", {
    id: "fcr_chat_manager",
    children: /*#__PURE__*/_jsx(FcrPopover, {
      getTooltipContainer: function getTooltipContainer(e) {
        return e.parentElement || e;
      },
      showArrow: showArrow,
      visible: managerVisible,
      overlayClassName: 'fcr_chat_manager_popover_overlay',
      trigger: "click",
      placement: "bottom",
      overlayInnerStyle: {
        border: 'none',
        minWidth: '200px',
        maxWidth: '280px',
        width: 'fit-content'
      },
      verticalOffset: -90,
      content: popoverContent,
      onVisibleChange: function onVisibleChange(visible) {
        setManagerVisible(visible);
      },
      children: /*#__PURE__*/_jsx(FcrToolTip, {
        content: t('fmt_participants_member_button_more'),
        mouseEnterDelay: 0,
        trigger: "hover",
        placement: "bottom",
        children: /*#__PURE__*/_jsx("div", {
          children: /*#__PURE__*/_jsx(FcrIconButton, {
            className: "frc-window-header__icon frc-window-header-setting__icon  fcr-no-drag",
            icon: FcrIconType.FCR_DIALOG_MORE,
            onClick: function onClick() {
              setManagerVisible(true);
            }
          })
        })
      })
    })
  });
};