import { Alert, Box, Typography } from '@tidbcloud/uikit'

import {
  ESSENTIAL_V2_RCU_MAX,
  ESSENTIAL_V2_RCU_MIN
} from 'dbaas/screens/NextGen/my-tidb-creation/plans/EssentialV2/schema'
import { useSharedTiDBContext } from 'dbaas/screens/NextGen/tidb-mgmt-container/shared/tidb-context'

import { EssentialV2CapacityField } from './EssentialV2CapacityField'
import { useEssentialV2CapacityLimits } from './use-essential-v2-capacity-limits'

export const EssentialV2EditCapacityBlock = () => {
  const tidb = useSharedTiDBContext()
  const { instanceMaxRcu, availableTotalRcu, scaleDownCooldownMinutes } = useEssentialV2CapacityLimits({
    excludeTidbId: tidb.tidbId,
    projectId: tidb.computed.projectId
  })

  const effectiveLimit = Math.min(
    instanceMaxRcu ?? ESSENTIAL_V2_RCU_MAX,
    availableTotalRcu ?? ESSENTIAL_V2_RCU_MAX,
    ESSENTIAL_V2_RCU_MAX
  )
  const isQuotaInsufficient = effectiveLimit < ESSENTIAL_V2_RCU_MIN

  return (
    <Box>
      <Typography variant="title-md">Capacity</Typography>
      <Box>
        Instance provisioned capacity is measured in Request Capacity Units (RCUs). TiDB Cloud automatically creates
        scaling rules based on the maximum capacity setting.
      </Box>
      {isQuotaInsufficient ? (
        <Alert color="red" mt={24}>
          Your organization's quota is insufficient for updating capacity. Minimum required:{' '}
          {ESSENTIAL_V2_RCU_MIN.toLocaleString()} RCUs, Available: {effectiveLimit.toLocaleString()} RCUs. Please
          contact your organization administrator to increase the quota.
        </Alert>
      ) : (
        <EssentialV2CapacityField
          mt={24}
          instanceMaxRcu={instanceMaxRcu}
          availableTotalRcu={availableTotalRcu}
          scaleDownCooldownMinutes={scaleDownCooldownMinutes}
        />
      )}
    </Box>
  )
}
