import { type HTMLAttributes } from 'react';
import { badgeVariants, type BadgeIntent, type BadgeSize } from '@lib/theme/variants';
import { cn } from '@lib/utils/cn';

interface BadgeProps extends HTMLAttributes<HTMLDivElement> {
  /** 의미 기반 색상 (기존 variant 대체) */
  intent?: BadgeIntent;
  /** 텍스트 크기 */
  size?: BadgeSize;
  /** 하위 호환: 기존 variant prop */
  variant?: 'default' | 'secondary' | 'destructive' | 'outline';
}

const LEGACY_MAP: Record<string, BadgeIntent> = {
  default: 'info',
  secondary: 'muted',
  destructive: 'critical',
  outline: 'muted',
};

export function Badge({ className, intent, size, variant, ...props }: BadgeProps) {
  const resolvedIntent = intent ?? (variant ? LEGACY_MAP[variant] : undefined);
  // cn() = clsx + tailwind-merge: 같은 그룹(text-color, bg, padding 등) 충돌 시
  // 마지막 className이 우선 → base 클래스의 일관 정책을 className에서 명시적으로만 override 가능
  return (
    <div
      className={cn(badgeVariants({ intent: resolvedIntent, size }), className)}
      {...props}
    />
  );
}
