import type { ContextHaving, ContextUsing } from '../../../framework-types/execution-context/Types';
import type { BundleExportNames, PlayerConfig } from '../../bundles/Types';
import type { MetricsAtom } from '../core/metrics/MetricsAtom';
import type { StoreEffectFactory } from '../core/state/StoreEffectFactory';
import type { CoreEffects, CoreExportNames, CoreStateAtoms } from '../core/Types';
import type { PlaybackStatePackageExports } from '../playback/playback-state/Types';
import type { SourceStateAtom } from '../source/atoms/SourceStateAtom';
import type { SourceExportNames } from '../source/Types';
import type { StreamDataStructureSegments } from '../stream-data-structure/segment/Exports';
import type { StreamDataStructureTracks } from '../stream-data-structure/track/Exports';
import type { MediaTrackAtom } from '../stream-data-structure/track/TrackAtom';
import type { StreamingState } from '../streaming/Types';
import type { ContextWithState } from '../Types';
import type { AdaptationStateAtom } from './AdaptationStateAtom';
import type { AdaptationTask } from './AdaptationTask';
import type { QualityFunction, WishConfig } from './WishConfigAtom';
import type { WishDataAtom } from './WishDataAtom';
export declare enum StartupQuality {
    Lowest = "lowest",
    Middle = "middle",
    Highest = "highest"
}
export declare enum AdaptationAlgorithm {
    Wish = "wish",
    Default = "default"
}
export type AdaptationInitialConfig = Partial<WishConfig> & {
    startupQuality?: StartupQuality;
};
export type AdaptationApi = {
    adaptation: {
        setXi(xi: number): void;
        setDelta(delta: number): void;
        setQualityFunction(qualityFunction: QualityFunction): void;
        setStartupQuality(startupQuality: StartupQuality | undefined): void;
    };
};
export declare enum AdaptationExportNames {
    ShouldCancel = "should-cancel",
    Select = "select",
    Metrics = "metrics",
    AdaptationTask = "adaptation-task",
    AdaptationStateAtom = "adaptation-state-atom"
}
export type AdaptationExports = {
    [AdaptationExportNames.ShouldCancel]: () => boolean;
    [AdaptationExportNames.Select]: (tracks: readonly MediaTrackAtom[]) => MediaTrackAtom;
    [AdaptationExportNames.Metrics]: MetricsAtom;
    [AdaptationExportNames.AdaptationTask]: typeof AdaptationTask;
    [AdaptationExportNames.AdaptationStateAtom]: AdaptationStateAtom;
};
export type AdaptationDependencies = {
    [CoreExportNames.CoreEffects]: CoreEffects;
    [SourceExportNames.SourceState]: SourceStateAtom;
    [CoreExportNames.CoreStateAtoms]: CoreStateAtoms;
    [BundleExportNames.PlayerConfig]: PlayerConfig;
} & StreamDataStructureSegments & StreamDataStructureTracks & StreamingState & PlaybackStatePackageExports;
export type AdaptationPackageContext = ContextUsing<[
    StoreEffectFactory<'adaptationData', WishDataAtom>,
    StoreEffectFactory<'adaptationState', AdaptationStateAtom>
], ContextHaving<AdaptationDependencies, AdaptationExports, ContextWithState>>;
