import { forwardRef, type HTMLAttributes } from 'react';
import { cn } from '@/lib/utils';

export type BadgeVariant =
  | 'default'
  | 'primary'
  | 'success'
  | 'warning'
  | 'danger'
  | 'info'
  | 'neutral'
  | 'outline';

const badgeClass: Record<BadgeVariant, string> = {
  default: 'badge bg-primary-100 text-primary-700 dark:bg-primary-500/15 dark:text-primary-300',
  primary: 'badge bg-primary-100 text-primary-700 dark:bg-primary-500/15 dark:text-primary-300',
  success: 'badge bg-emerald-100 text-emerald-700 dark:bg-emerald-500/15 dark:text-emerald-300',
  warning: 'badge bg-amber-100 text-amber-700 dark:bg-amber-500/15 dark:text-amber-300',
  danger: 'badge bg-red-100 text-red-700 dark:bg-red-500/15 dark:text-red-300',
  info: 'badge bg-sky-100 text-sky-700 dark:bg-sky-500/15 dark:text-sky-300',
  neutral: 'badge bg-slate-100 text-slate-600 dark:bg-slate-500/15 dark:text-slate-300',
  outline: 'badge border border-line text-ink-muted',
};

export const badgeVariants = { badgeClass };

export interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {
  variant?: BadgeVariant;
}

export const Badge = forwardRef<HTMLSpanElement, BadgeProps>(
  ({ className, variant = 'default', ...props }, ref) => {
    return <span ref={ref} className={cn(badgeClass[variant], className)} {...props} />;
  },
);

Badge.displayName = 'Badge';
