import { Alert } 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 { FormItem } from 'dbaas/screens/NextGen/shared/form-item'
import { Commonv1beta1ServicePlan } from 'dbaas/services/api-clients/v2025/tidb-management/v1beta2/interface'

export const Capacity = (props: { formMaxRcuName?: string; servicePlan: Commonv1beta1ServicePlan }) => {
  const { servicePlan, formMaxRcuName } = props
  const servicePlanLabel = servicePlan === 'BYOC' ? 'BYOC' : servicePlan

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

  // 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 the target plan
  const isQuotaInsufficient = effectiveLimit < PREMIUM_MIN_RCU

  return (
    <FormItem
      label="Capacity"
      description={
        <>
          Instance provisioned capacity is measured in Request Capacity Units (RCUs). TiDB Cloud automatically creates
          scaling rules based on the minimum and maximum capacity setting.{' '}
          {/* TODO: add doc link back after the doc is ready */}
          {/* <Anchor
            target="_blank"
            rel="noreferrer"
            href=""
            sx={{ display: 'inline-flex', alignItems: 'center', gap: 4 }}
          >
            Learn more <IconLinkExternal01 size={14} />
          </Anchor> */}
        </>
      }
    >
      {isQuotaInsufficient ? (
        <Alert color="red">
          Your organization's quota is insufficient for {servicePlanLabel} 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}
          showBillingDescription={servicePlan !== Commonv1beta1ServicePlan.BYOC}
        />
      )}
    </FormItem>
  )
}
