import { Frame, NodeStatus, MeasurementSetup, StatusLevel, LogFileFormatInfo, SourceNodeProperties, FrameDefinition } from '../models';
import { IMeasurementSetupContext, IMeasurementStatusContext, IOnlineStatusContext } from './internalDataStores';
/**
 * Options for retrieving measurement trace data in the useMeasurementTraceData hook.
 */
export type MeasurementTraceDataOptions = {
    /** If true, frames from scroll mode will be included in the returned data. Defaults to true. */
    includeScrollModeFrames?: boolean;
    /** If true, frames from fixed position mode will be included in the returned data. Defaults to true. */
    includeFixedPositionModeFrames?: boolean;
};
export declare const MAX_HISTORICAL_FRAMES = 2000;
/**
 * Filters log file formats based on the available protocols.
 * Formats with no protocol restrictions are always included.
 * @param formats - The log file formats to filter.
 * @param availableProtocols - The protocols currently available in the measurement setup.
 * @returns Formats that have no protocol restriction, or that support at least one available protocol.
 * @internal
 */
export declare function filterLogFileFormats(formats: LogFileFormatInfo[], availableProtocols: string[]): LogFileFormatInfo[];
/**
 * Extracts and deduplicates protocols from source node properties.
 * Returns `['CAN']` as a default when no protocols are found.
 * @param sources - Array of source node properties to inspect.
 * @returns Sorted, deduplicated array of protocol strings.
 * @internal
 */
export declare function extractProtocolsFromSources(sources: SourceNodeProperties[] | undefined): string[];
/**
 * Merges frame arrays and removes duplicates based on frame timestamp.
 * @param existing - Existing frames to merge into.
 * @param incoming - New frames to add.
 * @returns Merged and deduplicated frames.
 * @internal
 */
export declare function mergeAndDeduplicateFrames(existing: Frame[], incoming: Frame[]): Frame[];
/**
 * Merges multiple frame data maps, deduplicating frames within each key.
 * @param base - Base map to merge into (will be modified).
 * @param additional - Additional map to merge from.
 * @returns The merged map (same reference as base).
 * @internal
 */
export declare function mergeFrameDataMaps(base: Map<string, Frame[]>, additional: Map<string, Frame[]>): Map<string, Frame[]>;
/**
 * Calculates the overall status level from a bus status.
 * @param busStatus - The bus status to calculate from.
 * @returns The overall status level.
 * @internal
 */
export declare function calculateOverallStatusLevelFromBusStatus(busStatus: NodeStatus['busStatus']): StatusLevel;
/**
 * Calculates the overall status level from multiple node statuses.
 * @param statuses - Array of node statuses.
 * @returns The highest overall status level.
 * @internal
 */
export declare function calculateOverallStatusLevel(statuses: NodeStatus[]): StatusLevel;
/**
 * A hook for the measurement setup state.
 * @example
 * ```
 * const { measurementSetup, isLoaded, error } = useMeasurementSetupState();
 *
 * if (!isLoaded) return <Loading />;
 * if (error) return <ErrorView error={error} />;
 * // measurementSetup is now safe to use
 * ```
 * @returns The measurement setup state.
 */
export declare const useMeasurementSetupState: () => IMeasurementSetupContext;
/**
 * A hook for measurement setup.
 * @returns The measurement setup.
 */
export declare const useMeasurementSetup: () => MeasurementSetup;
/**
 * Hook to get all available protocols from the measurement setup.
 * @returns The available protocols.
 */
export declare const useAvailableProtocols: () => string[];
/**
 * Properties of the MessageDatabase React component which can be retrieved using the useMessageDatabases hook.
 */
export interface IMessageDatabase {
    /** The name of the database. */
    name: string;
    /** Names and identifiers of all sources using this database. */
    sources: {
        identifier: string;
        name: string;
    }[];
    /** Messages in this database. */
    messages: FrameDefinition[];
}
/**
 * Hook to get message databases available in the measurement. Will update as measurement setup changes. If nodeIdentifier is
 * specified, only databases available on that node will be included.
 */
export declare const useMessageDatabases: (nodeIdentifier?: string) => IMessageDatabase[];
/**
 * A hook for measurement status state.
 * @example
 * ```
 * const { nodeStatuses, isLoaded, error } = useMeasurementStatusState();
 *
 * if (!isLoaded) return <Loading />;
 * if (error) return <ErrorView error={error} />;
 * // nodeStatuses value is now safe to use
 * ```
 * @returns The measurement status state.
 */
export declare const useMeasurementStatusState: () => IMeasurementStatusContext;
/**
 * A hook for measurement status.
 * @returns The measurement status.
 */
export declare const useMeasurementStatus: () => NodeStatus[];
/**
 * Hook to get status for one node.
 * @returns The node status.
 */
export declare const useNodeStatus: (id: string) => NodeStatus | null;
/**
 * Hook to get the measurement's highest overall status level.
 * @returns The measurement's highest overall status.
 */
export declare const useOverallStatusLevel: () => StatusLevel;
/**
 * A hook for online status.
 * @example
 * ```
 * const { onlineStatus, isLoaded, error } = useOnlineStatus();
 *
 * if (!isLoaded) return <Loading />;
 * if (error) return <ErrorView error={error} />;
 * // onlineStatus is now safe to use
 * ```
 * @returns The online status.
 */
export declare const useOnlineStatus: () => IOnlineStatusContext;
/**
 * Hook keeping track of if the measurement is online.
 * @returns A flag that indicates if a measurement is started.
 * @example
 * ```
 * const isOnline = useIsOnline();
 *
 * if (isOnline) {
 *   // Measurement is online
 * } else {
 *   // Measurement is offline
 * }
 * ```
 */
export declare const useIsOnline: () => boolean;
/**
 * A hook for running periodic transmissions.
 * @returns The running periodic transmissions.
 */
export declare const useRunningPeriodicTransmissions: () => string[];
/**
 * A hook for new measurement data.
 * @param numberOfHistoryFrames - Optional number of history frames to read from data buffer when this hook initializes.
 * @param predicate - An optional predicate to filter out which data to return. Make sure to memoize this function if you are defining it inline
 *                    to avoid unnecessary re-renders.
 * @returns The new measurement data.
 * @deprecated Use `useScrollModeMeasurementData`, `useFixedPositionModeMeasurementData`, `useMessageData` or `useSignalData` instead.
 */
export declare const useNewMeasurementData: (numberOfHistoryFrames?: number, predicate?: (frame: Frame) => boolean) => Frame[];
/**
 * A hook for scroll mode measurement data. Will return the latest measurement data. Will include at most 500 frames.
 * @param startUs - Optional start time (in microseconds) to read from the scroll data buffer. Any frame with a timestamp less than this will be excluded.
 * @returns The measurement data.
 */
export declare const useScrollModeMeasurementData: (startUs?: number) => Frame[];
/**
 * A hook for fixed position mode measurement data. Will return the latest measurement data for each unique frame id and type.
 * @param startUs - Optional start time (in microseconds) to read from the fixed position data buffer. Any frame with a timestamp less than this will be excluded.
 * @returns The measurement data.
 */
export declare const useFixedPositionModeMeasurementData: (startUs?: number) => Frame[];
/**
 * A hook for combined measurement trace data from both scroll mode and fixed position mode. Will return the latest measurement data, with at most 500 frames from
 * scroll mode and one frame for each unique frame id and type from fixed position mode.
 * @param startUs - Optional start time (in microseconds) to read from the fixed position data buffer. Any frame with a timestamp less than this will be excluded.
 * @param options - Optional options to customize the measurement trace data retrieval.
 * @returns The combined measurement trace data.
 */
export declare const useCombinedMeasurementTraceData: (startUs?: number, options?: MeasurementTraceDataOptions) => {
    scrollModeFrames: Frame[];
    fixedPositionModeFrames: Frame[];
};
