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

import { FormItem } from 'dbaas/screens/NextGen/my-tidb-creation/shared/FormItem'
import { CapacityField } from 'dbaas/screens/NextGen/my-tidb-creation/shared/premium-byoc/capacity/CapacityField'
import {
  PREMIUM_MAX_RCU_FALLBACK,
  PREMIUM_MIN_RCU,
  useCapacityLimits
} from 'dbaas/screens/NextGen/my-tidb-creation/shared/premium-byoc/capacity/use-capacity-limits'
import { Commonv1beta1ServicePlan } from 'dbaas/services/api-clients/v2025/tidb-management/v1beta2/interface'

export const CapacitySection = (props: {
  formMaxRcuName?: string
  servicePlan: Commonv1beta1ServicePlan
  projectId: string
}) => {
  const { servicePlan, formMaxRcuName, projectId } = props

  const { instanceMaxRcu, availableTotalRcu } = useCapacityLimits({
    servicePlan,
    projectId
  })

  const effectiveLimit = Math.min(
    instanceMaxRcu ?? PREMIUM_MAX_RCU_FALLBACK,
    availableTotalRcu ?? PREMIUM_MAX_RCU_FALLBACK
  )

  const isQuotaInsufficient = effectiveLimit < PREMIUM_MIN_RCU

  return (
    <FormItem
      label="Capacity"
      description={
        <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">
          Your organization's quota is insufficient for {servicePlan} plan. Minimum required:{' '}
          {PREMIUM_MIN_RCU.toLocaleString()} RCUs, Available: {effectiveLimit.toLocaleString()} RCUs. Please contact
          your organization administrator to increase the quota.
        </Alert>
      ) : (
        <CapacityField
          formMaxRcuName={formMaxRcuName}
          instanceMaxRcu={instanceMaxRcu}
          availableTotalRcu={availableTotalRcu}
          servicePlan={servicePlan}
        />
      )}
    </FormItem>
  )
}
