import { type HTMLAttributes } from "react";
import { Check, AlertTriangle, Info, Shield } from "lucide-react";
import { cn } from "@/lib/utils";

export type BadgeVariant =
  | "success"
  | "warning"
  | "neutral"
  | "brand"
  | "info";

export interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {
  variant?: BadgeVariant;
  icon?: boolean;
}

const variantClasses: Record<BadgeVariant, string> = {
  success: "bg-success-bg text-brand-green border-success-green/20",
  warning: "bg-amber-50 text-amber-700 border-amber-200",
  neutral: "bg-surface-elevated text-muted border-border",
  brand: "bg-brand-green/10 text-brand-green border-brand-green/20",
  info: "bg-blue-50 text-blue-deep border-blue/20",
};

const defaultIcons: Record<BadgeVariant, typeof Check> = {
  success: Check,
  warning: AlertTriangle,
  neutral: Shield,
  brand: Shield,
  info: Info,
};

export function Badge({
  className,
  variant = "neutral",
  icon = true,
  children,
  ...props
}: BadgeProps) {
  const Icon = defaultIcons[variant];

  return (
    <span
      className={cn(
        "inline-flex min-h-[28px] items-center gap-1.5 rounded-pill border px-2.5 py-1",
        "font-inter text-xs font-medium",
        variantClasses[variant],
        className,
      )}
      {...props}
    >
      {icon ? <Icon className="size-3.5 shrink-0" aria-hidden="true" /> : null}
      {children}
    </span>
  );
}
