'use client';

import type { ComponentProps } from 'react';
import { ListPageCreateFloatButton, ListingBulkFabModal } from '@/components/listings';
import type { ModalOpcaoAction } from '@/components/ModalOpcoesBase';

type FeiraListFabAreaProps = {
    selectedCount: number;
    bulkBusy: boolean;
    modalAcoesMassaOpen: boolean;
    onOpenModalAcoesMassa: () => void;
    onCloseModalAcoesMassa: () => void;
    bulkModalTitle: string;
    bulkModalSubtitle: string;
    bulkActions: ModalOpcaoAction[];
    bulkFabTestId: string;
    bulkModalTestId: string;
    bulkFabAriaLabel: string;
    bulkModalWidth?: number;
    createFabTestId: string;
    createFabTooltip: string;
    onCreate: () => void;
    showCreateFab?: boolean;
};

/** Alterna FAB de ações em massa vs. criação — partilhado pelas listagens da feira. */
export function FeiraListFabArea({
    selectedCount,
    bulkBusy,
    modalAcoesMassaOpen,
    onOpenModalAcoesMassa,
    onCloseModalAcoesMassa,
    bulkModalTitle,
    bulkModalSubtitle,
    bulkActions,
    bulkFabTestId,
    bulkModalTestId,
    bulkFabAriaLabel,
    bulkModalWidth,
    createFabTestId,
    createFabTooltip,
    onCreate,
    showCreateFab = true,
}: FeiraListFabAreaProps) {
    if (selectedCount > 0) {
        const bulkProps: ComponentProps<typeof ListingBulkFabModal> = {
            showFab: true,
            modalOpen: modalAcoesMassaOpen,
            onOpenModal: onOpenModalAcoesMassa,
            onCloseModal: onCloseModalAcoesMassa,
            busy: bulkBusy,
            modalTitle: bulkModalTitle,
            modalSubtitle: bulkModalSubtitle,
            actions: bulkActions,
            fabAriaLabel: bulkFabAriaLabel,
            'data-testid-fab': bulkFabTestId,
            'data-testid-modal': bulkModalTestId,
        };
        if (bulkModalWidth != null) {
            bulkProps.modalWidth = bulkModalWidth;
        }
        return <ListingBulkFabModal {...bulkProps} />;
    }

    if (!showCreateFab) return null;

    return (
        <ListPageCreateFloatButton
            data-testid={createFabTestId}
            tooltip={{ title: createFabTooltip }}
            onClick={onCreate}
        />
    );
}
