import * as React from 'react'
import { cva, type VariantProps } from 'class-variance-authority'
import { cn } from '../lib/cn'

const badgeVariants = cva(
  // py-0.5 (2px) is the tight-primitive exception for badge padding.
  'inline-flex items-center rounded font-sans font-medium whitespace-nowrap',
  {
    variants: {
      variant: {
        default: 'bg-accent text-ink-on-accent',
        secondary: 'bg-hover text-ink',
        success: 'bg-surface text-success border border-success',
        warning: 'bg-surface text-warning border border-warning',
        error: 'bg-surface text-danger border border-danger',
        outline: 'bg-transparent text-ink border border-control-border',
      },
      size: {
        // px-2 / py-0.5: 2px vertical is the documented tight-primitive exception
        sm: 'text-meta px-2 py-0.5',
        md: 'text-body-2 px-2 py-0.5',
      },
    },
    defaultVariants: { variant: 'default', size: 'sm' },
  },
)

export interface BadgeProps
  extends React.HTMLAttributes<HTMLSpanElement>,
    VariantProps<typeof badgeVariants> {
  variant?: 'default' | 'secondary' | 'success' | 'warning' | 'error' | 'outline'
  size?: 'sm' | 'md'
}

export const Badge = React.forwardRef<HTMLSpanElement, BadgeProps>(
  ({ className, variant, size, ...props }, ref) => (
    <span ref={ref} className={cn(badgeVariants({ variant, size }), className)} {...props} />
  ),
)
Badge.displayName = 'Badge'

export { badgeVariants }
