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

import { ClusterFeatures, isFeatureAvailable, SharedCluster } from 'dbaas/features/ClusterManagement/cluster'
import { compareVersion } from 'dbaas/utils/chore'

import { Support } from '../chat2query/use-nav-tooltip'

export function useSQLUsersEnabled(cluster: SharedCluster) {
  const { state: status } = cluster
  const unavailable = useMemo(() => {
    const isCreating = cluster.computed?.creating
    const isRecovering = cluster.computed?.recovering
    return isCreating || isRecovering || !cluster.computed?.ready
  }, [status])

  let supportedSQLUsers = false

  let tips: React.ReactNode | null = null

  if (cluster.computed?.isServerless) {
    supportedSQLUsers = true
  } else if (compareVersion(cluster.version, '6.6.0', '<')) {
    supportedSQLUsers = false
    tips = (
      <Typography variant="body-lg">
        This feature is only available on TiDB Dedicated 6.6 or above. Contact
        <Support cluster={cluster} subject="Upgrade my cluster to access SQL Users" description="" />
        for assistance.
      </Typography>
    )
  } else if (!isFeatureAvailable(cluster, ClusterFeatures.DELEGATE_USER)) {
    supportedSQLUsers = false
    tips = (
      <Typography variant="body-lg">
        This feature is not available on your TiDB Dedicated cluster. Contact
        <Support cluster={cluster} subject="Upgrade my cluster to access SQL Users" description="" />
        for assistance.
      </Typography>
    )
  } else {
    supportedSQLUsers = true
  }

  return {
    enabled: !(unavailable && !cluster.computed.importing) && supportedSQLUsers,
    tips
  }
}
