import { OnInit } from '@angular/core';
import { IMetadataProvider, UserInfo } from '@memberjunction/core';
import { MJExperimentSessionEntity, PredictiveStudioExperimentSessionAction } from '@memberjunction/core-entities';
import { PredictiveStudioEngine } from '../engine/predictive-studio.engine';
import { PSIterationCard, PSLeaderboardEntry } from '../predictive-studio.types';
import { PSKanbanColumns } from '../predictive-studio.view-models';
import * as i0 from "@angular/core";
/** A budget gauge derived from the session's budget JSON + actual iteration spend. */
interface BudgetGaugeVM {
    label: string;
    fillPct: number;
    centerText: string;
    value: string;
    cap: string;
    color: string;
}
/**
 * Experiments panel: a kanban of iteration cards in Running / Completed / Pruned columns, a leaderboard
 * strip ranked by score, and budget gauges — all live against `MJ: Experiment Sessions` + their
 * `MJ: Experiment Session Iterations`:
 *
 * - The **active session** is the first Running session, else the most-recently-created one.
 * - The **kanban** + **leaderboard** are derived from that session's iterations (grouped by status,
 *   ranked by score) via the pure {@link groupIterationsToKanban} / {@link deriveLeaderboard} helpers.
 * - **Budget gauges** combine the session's budget JSON caps with actual iteration spend (compute
 *   cost, iteration count).
 * - **Pause / Cancel** call the {@link PredictiveStudioControlExperimentSessionOperation} Remote Op
 *   behind a confirmation; on success the engine refreshes.
 *
 * Empty state when there are no sessions. 100% entity-agnostic.
 */
export declare class PSExperimentsComponent implements OnInit {
    engine: PredictiveStudioEngine;
    /** Provider to route the control Remote Op + engine refresh through (multi-provider correctness). */
    provider: IMetadataProvider | null;
    /** Acting user for the engine refresh after a mutation. */
    currentUser: UserInfo | null;
    private cdr;
    private notifications;
    /** The currently-displayed session ID (first Running, else most recent). */
    sessionId: string;
    kanban: PSKanbanColumns;
    leaderboard: PSLeaderboardEntry[];
    budget: BudgetGaugeVM[];
    /** Pending control action awaiting confirmation (null when no modal is open). */
    pendingAction: PredictiveStudioExperimentSessionAction | null;
    /** Remote Op in flight. */
    busy: boolean;
    ngOnInit(): void;
    /** Pick the most relevant session to display: first Running, else the most-recently-created. */
    private selectActiveSession;
    get session(): MJExperimentSessionEntity | undefined;
    get iterationCountLabel(): string;
    private rebuild;
    /** Build the budget gauges from the session's budget JSON caps + actual iteration spend. */
    private buildBudget;
    /** Construct a single gauge VM (fill clamped to 0..100). */
    private gauge;
    /** Tolerant parse of the session's budget JSON (accepts a few common key spellings). */
    private parseBudget;
    get sessionBadgeClass(): string;
    get sessionDotColor(): string;
    statusBadgeClass(status: PSIterationCard['status']): string;
    statusLabel(status: PSIterationCard['status']): string;
    get canPause(): boolean;
    get canResume(): boolean;
    get canCancel(): boolean;
    requestControl(action: PredictiveStudioExperimentSessionAction): void;
    cancelControl(): void;
    get pendingTitle(): string;
    get pendingIcon(): string;
    get pendingConfirmLabel(): string;
    get pendingMessage(): string;
    /** Run the control Remote Op, then refresh the engine + close on success. */
    confirmControl(): Promise<void>;
    /** Force-refresh the engine's cached sessions/iterations, then rebuild. */
    private refreshAfterMutation;
    static ɵfac: i0.ɵɵFactoryDeclaration<PSExperimentsComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<PSExperimentsComponent, "ps-experiments", never, { "engine": { "alias": "engine"; "required": false; }; "provider": { "alias": "provider"; "required": false; }; "currentUser": { "alias": "currentUser"; "required": false; }; }, {}, never, never, true, never>;
}
export {};
//# sourceMappingURL=ps-experiments.component.d.ts.map