import { Stack } from '@tidbcloud/uikit'
import { observer } from 'mobx-react'

import { HeroComponent, isHeroQueryReady } from 'dbaas/components/Measurement'
import { SharedCluster } from 'dbaas/features/ClusterManagement/cluster'
import Datadog from 'dbaas/screens/Project/integrations/datadog'
import NewRelic from 'dbaas/screens/Project/integrations/newrelic'
import { useIntegrationMigrationStatus } from 'dbaas/screens/Project/integrations/useIntegrationMigrationStatus'
import { useIntegrationServiceListIntegrations } from 'dbaas/services/metricsIntegration'
import { V1IntegrationStatusResp, V1IntegrationType } from 'dbaas/services/metricsIntegration/interface'
import useStores from 'dbaas/stores/useStores'

import { ClusterPageShell } from '../../components'

import Prometheus from './Prometheus'

const Integration = observer(({ cluster }: { cluster: SharedCluster }) => {
  const {
    store: { tenantData, activeProject: project }
  } = useStores()
  const {
    data: integrations,
    isFetched,
    isError,
    refetch
  } = useIntegrationServiceListIntegrations(tenantData.id, project.id, cluster.id!, {})

  const integrationMap = integrations?.items?.reduce<{
    [index: string]: V1IntegrationStatusResp
  }>((prev, current) => {
    prev[current.type || 'unknown'] = current
    return prev
  }, {})
  const datadogIntegration = integrationMap?.[V1IntegrationType.INTEGRATION_TYPE_DATADOG]
  const newrelicIntegration = integrationMap?.[V1IntegrationType.INTEGRATION_TYPE_NEWRELIC]
  const isDatadogEnabled = useIntegrationMigrationStatus('integration_datadog', false)
  const isNewRelicEnabled = useIntegrationMigrationStatus('integration_new_relic', false)
  const isPrometheusEnabled = useIntegrationMigrationStatus('integration_prometheus', false)

  return (
    <ClusterPageShell title="Integrations">
      <HeroComponent ready={isHeroQueryReady({ isFetched, isError })} />
      <Stack gap="md">
        {isDatadogEnabled && (
          <Datadog
            integration={null}
            integrationInfoForCluster={datadogIntegration}
            project={project}
            cluster={cluster}
            onConfirmed={refetch}
          />
        )}
        {isNewRelicEnabled && (
          <NewRelic
            integration={null}
            integrationInfoForCluster={newrelicIntegration}
            project={project}
            cluster={cluster}
            onConfirmed={refetch}
          />
        )}
        {isPrometheusEnabled && <Prometheus project={project} cluster={cluster} />}
      </Stack>
    </ClusterPageShell>
  )
})

export default Integration
