import React, { ButtonHTMLAttributes, ReactNode } from 'react';
import Link from 'next/link';
import styles from './ButtonHeaderIcon.module.scss';

interface ButtonHeaderIconProps extends ButtonHTMLAttributes<HTMLButtonElement> {
    icon: ReactNode;
    title?: string;
    variant?: 'primary' | 'action' | 'default';
    href?: string;
    className?: string;
}

export function ButtonHeaderIcon({
    icon,
    title,
    variant = 'action',
    href,
    className = '',
    disabled,
    onClick,
    'aria-label': ariaLabel,
    ...props
}: ButtonHeaderIconProps) {
    const buttonClass = [
        styles.btnHeaderIcon,
        variant === 'primary' && styles.primary,
        disabled && styles.disabled,
        className,
    ]
        .filter(Boolean)
        .join(' ');

    // Se tiver href, renderizar como Link (Next.js) para navegação client-side
    const accessibleName = ariaLabel ?? title;
    if (!accessibleName || accessibleName.trim() === '') {
        if (process.env.NODE_ENV !== 'production') {
            console.warn('[ButtonHeaderIcon] aria-label ou title é obrigatório para nome acessível.');
        }
    }

    if (href) {
        return (
            <Link
                href={href}
                className={buttonClass}
                title={title ?? ''}
                aria-label={accessibleName}
                onClick={(e) => {
                    if (onClick) {
                        e.preventDefault();
                        onClick(e as unknown as React.MouseEvent<HTMLButtonElement>);
                    }
                }}
            >
                <span aria-hidden="true">{icon}</span>
            </Link>
        );
    }

    return (
        <button
            type="button"
            className={buttonClass}
            title={title}
            aria-label={accessibleName}
            disabled={disabled}
            onClick={onClick}
            {...props}
        >
            <span aria-hidden="true">{icon}</span>
        </button>
    );
}

export default ButtonHeaderIcon;
