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

import { CapacityField } from 'dbaas/screens/NextGen/premium/capacity/shared/CapacityField'
import {
  PREMIUM_MAX_RCU_FALLBACK,
  PREMIUM_MIN_RCU,
  useCapacityLimits
} from 'dbaas/screens/NextGen/premium/capacity/shared/use-capacity-limits'
import { useSharedTiDBContext } from 'dbaas/screens/NextGen/tidb-mgmt-container/shared/tidb-context'

export const EditCapacityBlock = () => {
  const tidb = useSharedTiDBContext()
  const capacityDescription = tidb.computed.isBYOC
    ? 'Instance provisioned capacity is measured in Request Capacity Units (RCUs). TiDB Cloud automatically creates scaling rules based on the maximum capacity setting.'
    : 'Instance provisioned capacity is measured in Request Capacity Units (RCUs). TiDB Cloud automatically creates scaling rules based on the minimum and maximum capacity setting.'

  const { instanceMaxRcu, availableTotalRcu } = useCapacityLimits({
    servicePlan: tidb.servicePlan,
    excludeTidbId: tidb.tidbId
  })

  // Calculate the effective limit considering both constraints
  const effectiveLimit = Math.min(
    instanceMaxRcu ?? PREMIUM_MAX_RCU_FALLBACK,
    availableTotalRcu ?? PREMIUM_MAX_RCU_FALLBACK
  )

  // Check if quota is insufficient for Premium plan
  const isQuotaInsufficient = effectiveLimit < PREMIUM_MIN_RCU

  return (
    <Box>
      <Typography variant="title-md">Capacity</Typography>
      <Typography variant="body-lg" mt={8}>
        {capacityDescription}
        {/* TODO: add doc link back after the doc is ready */}
        {/* <a href="">Learn more</a>. */}
      </Typography>
      {isQuotaInsufficient ? (
        <Alert color="red" mt={24}>
          Your organization's quota is insufficient for updating capacity. Minimum required:{' '}
          {PREMIUM_MIN_RCU.toLocaleString()} RCUs, Available: {effectiveLimit.toLocaleString()} RCUs. Please contact
          your organization administrator to increase the quota.
        </Alert>
      ) : (
        <CapacityField
          mt={24}
          instanceMaxRcu={instanceMaxRcu}
          availableTotalRcu={availableTotalRcu}
          showBillingDescription={!tidb.computed.isBYOC}
        />
      )}
    </Box>
  )
}
