'use client';

import { Filter } from 'lucide-react';
import { Badge, Tooltip } from 'antd';
import { ICON_SIZE_MD } from '@/components/icons';
import { ButtonHeaderIcon } from '@/components/ui';
import headerIconStyles from '@/components/ui/buttons/ButtonHeaderIcon/ButtonHeaderIcon.module.scss';

export type ListingFilterHeaderButtonProps = {
    onClick: () => void;
    /** Quantidade de filtros ativos (badge no botão). */
    activeFiltersCount: number;
    /** Nome acessível obrigatório (aria-label). */
    ariaLabel: string;
    /** Modal/drawer de filtros aberto — `aria-expanded`. */
    expanded?: boolean;
    'data-testid'?: string;
    tooltipTitle?: string;
    className?: string;
};

/**
 * Botão "Filtrar" (só ícone) do header de listagens — exige `ariaLabel` explícito.
 */
export function ListingFilterHeaderButton({
    onClick,
    activeFiltersCount,
    ariaLabel,
    expanded = false,
    'data-testid': dataTestId,
    tooltipTitle,
    className,
}: ListingFilterHeaderButtonProps) {
    const hasActive = activeFiltersCount > 0;
    const title = hasActive ? `Filtros (${activeFiltersCount})` : 'Filtros';
    const tip =
        tooltipTitle ??
        (hasActive
            ? `Filtros ativos (${activeFiltersCount}) — clique para editar`
            : 'Abrir filtros da listagem');

    return (
        <Tooltip title={tip}>
            <span style={{ display: 'inline-block' }}>
                <Badge dot={hasActive} color="geekblue">
                    <ButtonHeaderIcon
                        data-testid={dataTestId}
                        icon={<Filter size={ICON_SIZE_MD} aria-hidden />}
                        title={title}
                        aria-label={ariaLabel}
                        aria-expanded={expanded}
                        aria-haspopup="dialog"
                        onClick={onClick}
                        className={className ?? headerIconStyles.btnHeaderIcon}
                    />
                </Badge>
            </span>
        </Tooltip>
    );
}

export default ListingFilterHeaderButton;
