import { type EventBlockKind } from '../../blocks/events/shared';
import type { EventScheduleScope, EventSurfaceScope } from '../../blocks/events/shared/filtering';
import type { EventFilterCategory, EventFilterStaffMember, EventFilterVenue } from '../api/types';
type UseEventFiltersOptions = {
    /** Whether to show category filter (auto, always, never) */
    showCategoryFilter?: 'auto' | 'always' | 'never';
    /** Whether to show venue filter */
    showVenueFilter?: boolean;
    /** Whether to show staff filter */
    showStaffFilter?: boolean;
    /** Pre-selected category IDs (comma-separated) from block config */
    preFilterCategoryIds?: string | readonly string[] | null;
    /** Pre-selected staff member ID from block config */
    preFilterStaffMemberId?: string | null;
    /** Pre-selected venue ID from block config */
    preFilterVenueId?: string | null;
    /** Hard block-level kind restriction */
    preFilterKind?: EventBlockKind | null;
    /** Hard block-level semantic event surface restriction */
    preFilterEventSurface?: EventSurfaceScope | null;
    /** Hard block-level event preset restriction */
    preFilterEventPresets?: string | null;
    /** Hard block-level schedule cadence restriction */
    preFilterScheduleScope?: EventScheduleScope | null;
};
type EventFiltersState = {
    /** Available categories from the API */
    categories: EventFilterCategory[];
    /** Available venues from the API */
    venues: EventFilterVenue[];
    /** Available staff members from the API */
    staffMembers: EventFilterStaffMember[];
    /** Currently selected kind filter */
    selectedKind: 'all' | 'courses' | 'events';
    /** Currently selected category ID (or 'all') */
    selectedCategoryId: string;
    /** Currently selected staff member ID (or 'all') */
    selectedStaffMemberId: string;
    /** Currently selected venue ID (or 'all') */
    selectedVenueId: string;
    /** Whether filters are loading */
    loading: boolean;
    /** Error from filter fetch */
    error: Error | null;
    /** Whether category filter should be shown */
    shouldShowCategoryFilter: boolean;
    /** Whether venue filter should be shown */
    shouldShowVenueFilter: boolean;
    /** Whether staff filter should be shown */
    shouldShowStaffFilter: boolean;
    /** Whether the public category UI should include the Course option */
    showCourseOption: boolean;
    /** Label for the course-like category option */
    courseOptionLabel: string;
    /** Whether any filter is currently active (non-default) */
    hasActiveFilters: boolean;
    /** Set selected kind */
    setSelectedKind: (kind: 'all' | 'courses' | 'events') => void;
    /** Set selected category */
    setSelectedCategoryId: (id: string) => void;
    /** Set selected staff member */
    setSelectedStaffMemberId: (id: string) => void;
    /** Set selected venue */
    setSelectedVenueId: (id: string) => void;
    /** Reset all filters to default values */
    resetFilters: () => void;
    /** Get filter params for API calls */
    getFilterParams: () => {
        categoryIds?: string;
        staffMemberId?: string;
        venueId?: string;
        kind?: 'courses' | 'events';
        eventSurface?: EventSurfaceScope;
        eventPresets?: string;
        scheduleScope?: EventScheduleScope;
    };
};
/**
 * Hook for managing event filters.
 *
 * Fetches available filter options and manages filter selection state.
 * Respects block-level pre-filtering configuration.
 *
 * @example
 * ```tsx
 * const {
 *   categories,
 *   venues,
 *   selectedCategoryId,
 *   setSelectedCategoryId,
 *   shouldShowCategoryFilter,
 *   getFilterParams,
 * } = useEventFilters({
 *   showCategoryFilter: 'auto',
 *   showVenueFilter: true,
 * });
 *
 * // Use filter params in event queries
 * const params = getFilterParams();
 * const events = await api.getPublicEvents(params);
 * ```
 */
export declare function useEventFilters({ showCategoryFilter, showVenueFilter, showStaffFilter, preFilterCategoryIds, preFilterStaffMemberId, preFilterVenueId, preFilterKind, preFilterEventSurface, preFilterEventPresets, preFilterScheduleScope, }?: UseEventFiltersOptions): EventFiltersState;
export default useEventFilters;
