'use client';

import type { ReactNode } from 'react';
import { Space } from 'antd';
import { ListingFilterHeaderButton, SavedFilterActiveTag } from '@/components/listings';

type FeiraListHeaderToolbarProps = {
    filtroSalvoAtivo: { nome: string } | null;
    filtroSalvoDataTestId: string;
    filtrosAtivosCount: number;
    filtrosModalOpen: boolean;
    onOpenFiltros: () => void;
    filterButtonTestId: string;
    filterTooltipActive: string;
    filterTooltipEmpty: string;
    filterAriaLabel?: string;
    /** Ações à esquerda (ex.: busca avançada). */
    leadingExtra?: ReactNode;
    /** Botão "Opções" (à esquerda de Filtrar / Exportar). */
    optionsButton?: ReactNode;
    exportButton: ReactNode;
};

/** Toolbar do header (filtro salvo, opções, filtros, export) — partilhada pelas listagens operacionais da feira. */
export function FeiraListHeaderToolbar({
    filtroSalvoAtivo,
    filtroSalvoDataTestId,
    filtrosAtivosCount,
    filtrosModalOpen,
    onOpenFiltros,
    filterButtonTestId,
    filterTooltipActive,
    filterTooltipEmpty,
    filterAriaLabel = 'Abrir modal de filtros',
    leadingExtra,
    optionsButton,
    exportButton,
}: FeiraListHeaderToolbarProps) {
    return (
        <Space wrap size={8} align="center">
            {filtroSalvoAtivo ? (
                <SavedFilterActiveTag nome={filtroSalvoAtivo.nome} dataTestId={filtroSalvoDataTestId} />
            ) : null}
            {leadingExtra}
            {optionsButton}
            <ListingFilterHeaderButton
                data-testid={filterButtonTestId}
                activeFiltersCount={filtrosAtivosCount}
                ariaLabel={filterAriaLabel}
                expanded={filtrosModalOpen}
                onClick={onOpenFiltros}
                tooltipTitle={filtrosAtivosCount > 0 ? filterTooltipActive : filterTooltipEmpty}
            />
            {exportButton}
        </Space>
    );
}
