import type { UseVenueEventsOptions } from "@agg-build/hooks";
import type { MatchStatus, Venue } from "@agg-build/sdk";
import type { MutableRefObject } from "react";
import type { IconName } from "../../primitives/icon";
import type { VenueLogoName } from "../../primitives/venue-logo";
import type { VenueEventWithMarkets, VenueMarket, VenueMarketOutcome } from "../item";
export type EventListTabValue = "matched" | `${Venue}` | (string & {});
/** Exposes EventList internal state for snapshot capture by parent components. */
export type EventListStateRef = {
    venueTab: EventListTabValue;
    loadedPageCount: number;
};
export type EventListTab = {
    value: EventListTabValue;
    label: string;
    iconName?: IconName;
    venueLogo?: VenueLogoName;
    venues?: UseVenueEventsOptions["venues"];
    disabled?: boolean;
    isComingSoon?: boolean;
    matchStatus?: MatchStatus[];
};
export type EventListProps = {
    /** Section title displayed above the event list. */
    title: string;
    /** Maximum number of events requested per page. */
    limit?: number;
    /** Max number of cards shown before truncation or progressive reveal. */
    maxVisibleItems?: number;
    /** Search phrase forwarded to the events query. */
    search?: UseVenueEventsOptions["search"];
    /** Category filters applied to the events query. */
    categoryIds?: UseVenueEventsOptions["categoryIds"];
    /** Called when an event card body is clicked. */
    onEventClick?: (event?: VenueEventWithMarkets) => void;
    /** Called when an outcome price badge is clicked. Use to navigate to the event with a preselected market and outcome. */
    onMarketClick?: (event: VenueEventWithMarkets, market: VenueMarket, outcome: VenueMarketOutcome) => void;
    /** Returns an href for each market outcome badge, enabling native browser link behavior (cmd/ctrl-click → new tab). */
    getMarketHref?: (event: VenueEventWithMarkets, market: VenueMarket, outcome: VenueMarketOutcome) => string;
    /** Returns an href for each event card, enabling native browser link behaviors (cmd/ctrl-click → new tab). */
    getEventHref?: (event: VenueEventWithMarkets) => string;
    /** Venue tab value to restore on mount (from navigation snapshot). */
    initialVenueTab?: EventListTabValue;
    /** Number of infinite query pages to eagerly prefetch on mount (from navigation snapshot). */
    initialLoadedPageCount?: number;
    /** Ref that EventList writes its internal state to, so parents can read it for snapshot capture. */
    stateRef?: MutableRefObject<EventListStateRef | null>;
};
