import { StatusBadge, StatusVariantMap } from 'dbaas/components/StatusBadge'
import { useGetEnabledDPFeaturesForCluster } from 'dbaas/services/dataflow'
import { V1beta1RecoveryGroupState } from 'dbaas/services/dataflow/interface'

import { DataPlatformFeatureFlag } from '../Common'

export const RecoveryGroupStatusColorMap = {
  [V1beta1RecoveryGroupState.DELETING]: 'carbon.6',
  [V1beta1RecoveryGroupState.DELETED]: 'red',
  [V1beta1RecoveryGroupState.FAILED]: 'red',
  [V1beta1RecoveryGroupState.UNPROTECTED]: 'red',
  [V1beta1RecoveryGroupState.FAILING_OVER]: 'peacock',
  [V1beta1RecoveryGroupState.MIGRATING]: 'peacock',
  [V1beta1RecoveryGroupState.MODIFYING]: 'peacock',
  [V1beta1RecoveryGroupState.REPROTECTING]: 'peacock',
  [V1beta1RecoveryGroupState.AVAILABLE]: 'green',
  [V1beta1RecoveryGroupState.WARNING]: 'yellow',
  [V1beta1RecoveryGroupState.CREATING]: 'carbon.6'
}

export const RecoveryGroupStatus = ({
  status,
  error,
  withinPortal = true
}: {
  status: V1beta1RecoveryGroupState
  error?: string
  withinPortal?: boolean
}) => {
  const color = RecoveryGroupStatusColorMap[status] as any
  const variant = StatusVariantMap[color] ?? 'default'
  return (
    <StatusBadge
      variant={variant}
      status={status.replace('_', ' ')}
      error={error}
      color={color}
      hoverCardProps={{ withinPortal }}
    />
  )
}

export const useRecoveryGroupEnabled = (orgId: string, projectId: string) => {
  const { data } = useGetEnabledDPFeaturesForCluster(orgId, projectId, '0', {
    query: {
      refetchOnWindowFocus: false
    }
  })
  return data?.features.includes(DataPlatformFeatureFlag.SupportRecoveryGroup) ?? false
}
