import { Stack } from '@tidbcloud/uikit'
import { useMemo } from 'react'

import { HeroComponent, isHeroQueryReady } from 'dbaas/components/Measurement'
import { PageAccessGuard } from 'dbaas/contexts/access-control'
import { useRequestIntegrationData } from 'dbaas/screens/ClusterV2/features/ClusterIntegration/config/ItemData'
import { useDatadogIntegrationData } from 'dbaas/screens/ClusterV2/features/ClusterIntegration/features/MonitoringIntegration/Datadog'
// import { useNewRelicIntegrationData } from 'dbaas/screens/ClusterV2/features/ClusterIntegration/features/MonitoringIntegration/NewRelic'
import { usePremiumPrometheusData } from 'dbaas/screens/ClusterV2/features/ClusterIntegration/features/MonitoringIntegration/Prometheus'
import { IntegrationGroup } from 'dbaas/screens/ClusterV2/features/ClusterIntegration/IntegrationGroup'
import { getTidbStateToPassivePhrase } from 'dbaas/screens/NextGen/shared/model/tidb-state'
import { useSharedTiDBContext } from 'dbaas/screens/NextGen/tidb-mgmt-container/shared/tidb-context'
import { TiDBPageShell } from 'dbaas/screens/NextGen/tidb-mgmt-container/shared/TiDBPageShell'
import { useIntegrationServiceListIntegrations2 } from 'dbaas/services/metricsIntegration'
import { V1IntegrationStatusResp, V1IntegrationType } from 'dbaas/services/metricsIntegration/interface'
import useStores from 'dbaas/stores/useStores'

const Integrations = () => {
  const {
    store: { tenantData }
  } = useStores()
  const tidb = useSharedTiDBContext()
  const passivePhrase = getTidbStateToPassivePhrase(tidb.state)
  const {
    data: integrations,
    isFetched,
    isError,
    refetch
  } = useIntegrationServiceListIntegrations2(tenantData.id, tidb.tidbId || '', {})
  const integrationMap = useMemo(
    () =>
      integrations?.items?.reduce<Partial<Record<V1IntegrationType, V1IntegrationStatusResp>>>((prev, current) => {
        if (current.type) {
          prev[current.type] = current
        }
        return prev
      }, {}) ?? {},
    [integrations?.items]
  )
  const requestIntegration = useRequestIntegrationData()
  const prometheus = usePremiumPrometheusData({
    cluster: {
      id: tidb.tidbId || '',
      displayName: tidb.displayName || '',
      servicePlan: tidb.servicePlan,
      isReady: tidb.computed.ready,
      installDisabledTip: `Install is unavailable while the instance is ${passivePhrase}.`
    },
    actionAccessId: 'TidbxCapacityUpdate',
    featured: true
  })
  const datadog = useDatadogIntegrationData({
    cluster: {
      id: tidb.tidbId || '',
      displayName: tidb.displayName || '',
      servicePlan: tidb.servicePlan,
      isReady: tidb.computed.ready,
      installDisabledTip: `Install is unavailable while the instance is ${passivePhrase}.`
    },
    integration: integrationMap[V1IntegrationType.INTEGRATION_TYPE_DATADOG],
    actionAccessId: 'TidbCapacityUpdate',
    featured: true,
    onConfirmed: refetch
  })
  // const newRelic = useNewRelicIntegrationData({
  //   cluster: {
  //     id: tidb.tidbId || '',
  //     displayName: tidb.displayName || '',
  //     servicePlan: tidb.servicePlan,
  //     isReady: tidb.computed.ready,
  //     installDisabledTip: `Install is unavailable while the instance is ${passivePhrase}.`
  //   },
  //   actionAccessId: 'TidbCapacityUpdate',
  //   featured: true
  // })

  return (
    <TiDBPageShell
      title="Integrations"
      wrapperProps={{
        display: 'flex',
        h: '100%',
        sx: {
          flexDirection: 'column'
        }
      }}
      bodyProps={{
        sx: { flex: 1, minHeight: 0 }
      }}
    >
      <HeroComponent ready={isHeroQueryReady({ isFetched, isError })} />
      <PageAccessGuard id="TidbxRead">
        <Stack pb="lg" data-testid="premium-integrations-page">
          <IntegrationGroup
            data={{
              name: 'Featured',
              items: [
                prometheus,
                datadog,
                // newRelic,
                requestIntegration
              ]
            }}
          />
        </Stack>
      </PageAccessGuard>
    </TiDBPageShell>
  )
}

export default Integrations
