// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
// with the License. A copy of the License is located at
//
// http://aws.amazon.com/apache2.0/
//
// or in the "LICENSE.txt" file accompanying this file. This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES
// OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions and
// limitations under the License.
import {Box, Button, Modal, SpaceBetween} from '@cloudscape-design/components'
import React, {useCallback} from 'react'
import {Trans, useTranslation} from 'react-i18next'
import {notify} from '../../../model'
import {
CostMonitoringActivationErrorKind,
useActivateCostMonitoringMutation,
useCostMonitoringStatus,
} from './costs.queries'
import {consoleDomain, useState} from '../../../store'
import {useFeatureFlag} from '../../../feature-flags/useFeatureFlag'
export function EnableCostMonitoringButton() {
const {t} = useTranslation()
const isCostMonitoringActive = useFeatureFlag('cost_monitoring')
const defaultRegion = useState(['aws', 'region'])
const region = useState(['app', 'selectedRegion']) || defaultRegion
const [modalVisible, setModalVisible] = React.useState(false)
const showModal = useCallback(() => {
setModalVisible(true)
}, [setModalVisible])
const dismissModal = useCallback(() => {
setModalVisible(false)
}, [setModalVisible])
const onActivationError = useCallback(
(kind: CostMonitoringActivationErrorKind, message?: string) => {
switch (kind) {
case 'costExplorerCannotBeAccessed':
showModal()
break
case 'genericError':
notify(message, 'error')
break
}
},
[showModal],
)
const onActivationSuccess = useCallback(() => {
notify(t('costMonitoring.activateButton.activationSuccess'))
}, [t])
const {data: costMonitoringStatus, isLoading} = useCostMonitoringStatus()
const costMonitoringStatusMutation = useActivateCostMonitoringMutation(
onActivationError,
onActivationSuccess,
)
const onClick = useCallback(() => {
costMonitoringStatusMutation.mutate()
}, [costMonitoringStatusMutation])
const domain = consoleDomain(region)
const costExplorerHref = `${domain}/cost-management/home#/cost-explorer`
if (isLoading || costMonitoringStatus || !isCostMonitoringActive) return null
return (
<>
{modalVisible && (
}
header={t('costMonitoring.enableCostExplorerModal.title')}
>
)}
>
)
}