'use client';

import type { LucideIcon, LucideProps } from 'lucide-react';
import { cn } from '@/lib/utils/cn';
import { iconTokenSize, type IconTokenSize } from './iconTokens';

export type WaygestIconSize = IconTokenSize | number;

export type WaygestIconProps = Omit<LucideProps, 'size'> & {
    icon: LucideIcon;
    size?: WaygestIconSize;
    spin?: boolean;
};

/**
 * Wrapper fino para Lucide: tamanhos tokenizados e `spin`.
 * Preferir import direto de `lucide-react` em features quando o ícone for único do domínio.
 */
export function WaygestIcon({
    icon: Icon,
    size = 'md',
    spin,
    className,
    strokeWidth = 2,
    ...props
}: WaygestIconProps) {
    const px = typeof size === 'number' ? size : iconTokenSize[size];
    return (
        <Icon
            size={px}
            strokeWidth={strokeWidth}
            className={cn(spin && 'animate-spin', className)}
            aria-hidden={props['aria-hidden'] ?? props['aria-label'] == null}
            {...props}
        />
    );
}
