import { useSharedTiDBContextSafe } from 'dbaas/screens/NextGen/tidb-mgmt-container/shared/tidb-context'
import { V1IntegrationStatusResp, V1IntegrationType } from 'dbaas/services/metricsIntegration/interface'

import { useDatadogIntegrationData } from '../features/MonitoringIntegration/Datadog'
// import { useNewRelicIntegrationData } from '../features/MonitoringIntegration/NewRelic'

import {
  airbyte,
  amazonAppFlow,
  awsLambda,
  cloudflareWorkers,
  dbeaver,
  dbtLabs,
  django,
  gitpod,
  goMySQLDriver,
  gorm,
  hibernate,
  jetBrainsDataGrip,
  myBatis,
  mysql2,
  mySqlclient,
  mySQLConnectorPython,
  mySqlJs,
  mySQLWorkbench,
  n8n,
  navicat,
  netlify,
  nodeMysql2,
  peewee,
  prisma,
  proxySQL,
  pyMySQL,
  rails,
  sequelize,
  springBoot,
  sqlAlchemy,
  typeORM,
  useRequestIntegrationData,
  visualStudioCode,
  usePrometheusData,
  useTerraformData,
  wordpress,
  zapier,
  useNextJsData,
  useJdbcData,
  useBedrockData,
  useVercelData
} from './ItemData'
import { IntegrationGroupType, IntegrationItemType } from './type'

const isIntegrationItem = (item: IntegrationItemType | undefined): item is IntegrationItemType => Boolean(item)

type EssentialCluster = {
  id: string
  displayName: string
  servicePlan?: string
  isReady?: boolean
  installDisabledTip?: string
}

export const useEssentialData = ({
  cluster,
  integrationMap = {},
  onIntegrationConfirmed
}: {
  cluster: EssentialCluster
  integrationMap?: Partial<Record<V1IntegrationType, V1IntegrationStatusResp>>
  onIntegrationConfirmed?: () => void
}): IntegrationGroupType[] => {
  const tidb = useSharedTiDBContextSafe()
  const isEssentialV2 = !!tidb?.computed.isEssentialV2
  const requestIntegration = useRequestIntegrationData()
  const terraform = useTerraformData(true)
  const nextJs = useNextJsData(true)
  const jdbc = useJdbcData(true)
  const bedrock = useBedrockData(cluster.id)
  const vercel = useVercelData()
  const prometheus = usePrometheusData({ ...cluster, isEssentialV2 })
  const datadog = useDatadogIntegrationData({
    cluster,
    integration: integrationMap[V1IntegrationType.INTEGRATION_TYPE_DATADOG],
    onConfirmed: onIntegrationConfirmed
  })
  // const newRelic = useNewRelicIntegrationData({ cluster })
  return [
    {
      name: 'Featured',
      items: [terraform, nextJs, jdbc, requestIntegration]
    },
    {
      name: 'Deploy',
      items: [vercel, awsLambda, cloudflareWorkers, gitpod, netlify, wordpress]
    },
    {
      name: 'Data',
      items: [
        prometheus,
        datadog,
        // newRelic,
        airbyte,
        amazonAppFlow,
        dbtLabs,
        n8n,
        zapier,
        isEssentialV2 ? undefined : bedrock
      ].filter(isIntegrationItem)
    },
    {
      name: 'Developer Tools',
      items: [dbeaver, jetBrainsDataGrip, mySQLWorkbench, navicat, proxySQL, visualStudioCode]
    },
    {
      name: 'Java',
      items: [hibernate, myBatis, springBoot]
    },
    { name: 'Go', items: [goMySQLDriver, gorm] },
    {
      name: 'Python',
      items: [django, mySqlclient, mySQLConnectorPython, peewee, pyMySQL, sqlAlchemy]
    },
    { name: 'Node.js', items: [mySqlJs, nodeMysql2, prisma, sequelize, typeORM] },
    { name: 'Ruby', items: [rails, mysql2] }
  ]
}
