import React, { useState, useEffect, useCallback } from 'react';
import PropTypes from 'prop-types';
import { useTranslation } from 'react-i18next';
import AppContainer from '../../../services/AppContainer';
import { withUnstatedContainers } from '../../UnstatedUtils';
import { toastSuccess, toastError } from '../../../util/apiNotification';
import OfficialBotSettings from './OfficialBotSettings';
import CustomBotWithoutProxySettings from './CustomBotWithoutProxySettings';
import CustomBotWithProxySettings from './CustomBotWithProxySettings';
import ConfirmBotChangeModal from './ConfirmBotChangeModal';
import BotTypeCard from './BotTypeCard';
const botTypes = ['officialBot', 'customBotWithoutProxy', 'customBotWithProxy'];
const SlackIntegration = (props) => {
const { appContainer } = props;
const { t } = useTranslation();
const [currentBotType, setCurrentBotType] = useState(null);
const [selectedBotType, setSelectedBotType] = useState(null);
const [slackSigningSecret, setSlackSigningSecret] = useState('');
const [slackBotToken, setSlackBotToken] = useState('');
const [slackSigningSecretEnv, setSlackSigningSecretEnv] = useState('');
const [slackBotTokenEnv, setSlackBotTokenEnv] = useState('');
const [isConnectedToSlack, setIsConnectedToSlack] = useState(null);
const [isRegisterSlackCredentials, setIsRegisterSlackCredentials] = useState(false);
const [isSendTestMessage, setIsSendTestMessage] = useState(false);
const [isSetupSlackBot, setIsSetupSlackBot] = useState(false);
const fetchData = useCallback(async() => {
try {
const response = await appContainer.apiv3.get('slack-integration/');
const { currentBotType, customBotWithoutProxySettings } = response.data.slackBotSettingParams;
const {
slackSigningSecret, slackBotToken, slackSigningSecretEnvVars, slackBotTokenEnvVars, isSetupSlackBot, isConnectedToSlack,
} = customBotWithoutProxySettings;
setCurrentBotType(currentBotType);
setSlackSigningSecret(slackSigningSecret);
setSlackBotToken(slackBotToken);
setSlackSigningSecretEnv(slackSigningSecretEnvVars);
setSlackBotTokenEnv(slackBotTokenEnvVars);
setIsConnectedToSlack(isConnectedToSlack);
setIsSetupSlackBot(isSetupSlackBot);
if (isConnectedToSlack === false) {
return setIsRegisterSlackCredentials(false);
}
setIsRegisterSlackCredentials(true);
}
catch (err) {
toastError(err);
}
}, [appContainer.apiv3]);
useEffect(() => {
fetchData();
}, [fetchData]);
const handleBotTypeSelect = (clickedBotType) => {
if (clickedBotType === currentBotType) {
return;
}
if (currentBotType === null) {
setCurrentBotType(clickedBotType);
return;
}
setSelectedBotType(clickedBotType);
};
const cancelBotChangeHandler = () => {
setSelectedBotType(null);
};
const changeCurrentBotSettingsHandler = async() => {
try {
const res = await appContainer.apiv3.put('slack-integration/custom-bot-without-proxy', {
slackSigningSecret: '',
slackBotToken: '',
currentBotType: selectedBotType,
});
setCurrentBotType(res.data.customBotWithoutProxySettingParams.slackBotType);
setSelectedBotType(null);
toastSuccess(t('admin:slack_integration.bot_reset_successful'));
setIsRegisterSlackCredentials(false);
setSlackSigningSecret('');
setSlackBotToken('');
setIsSendTestMessage(false);
}
catch (err) {
toastError(err);
}
};
let settingsComponent = null;
switch (currentBotType) {
case 'officialBot':
settingsComponent =