/**
 * forecast-lifecycle.ts
 *
 * Canonical state machine for forecast display lifecycle.
 * Single source of truth for statuses, transitions, and classification logic.
 *
 * States:
 *   UPCOMING_QUALIFIED  — forecast qualifies, contest not started, pregame only
 *   LIVE_PENDING        — contest started, awaiting final result
 *   FINAL_GRADED        — contest final, graded with outcome
 *   CANCELLED           — contest cancelled/postponed/voided
 *   ERROR_REVIEW        — data mismatch requiring review
 */
export declare const ForecastStatus: {
    readonly UPCOMING_QUALIFIED: "UPCOMING_QUALIFIED";
    readonly LIVE_PENDING: "LIVE_PENDING";
    readonly FINAL_GRADED: "FINAL_GRADED";
    readonly CANCELLED: "CANCELLED";
    readonly ERROR_REVIEW: "ERROR_REVIEW";
};
export type ForecastStatusType = typeof ForecastStatus[keyof typeof ForecastStatus];
export declare const TIER_THRESHOLDS: readonly [{
    readonly tier: "A+";
    readonly min: 0.85;
}, {
    readonly tier: "A";
    readonly min: 0.7;
}, {
    readonly tier: "B+";
    readonly min: 0.55;
}, {
    readonly tier: "B";
    readonly min: 0;
}];
export declare const TIER_ORDER: readonly ["A+", "A", "B+", "B"];
export declare const MIN_DISPLAY_CONFIDENCE = 0.55;
export declare function classifyTier(confidenceScore: number | null): string;
export declare function qualifiesForGradedFeed(confidenceScore: number | null): boolean;
export interface ForecastContext {
    startsAt: Date | string | null;
    hasAccuracyRecord: boolean;
    actualWinner: string | null;
    confidenceScore: number | null;
}
/**
 * Derive the canonical lifecycle status from a forecast's data.
 * This is the ONLY place status is determined — no ad-hoc logic elsewhere.
 */
export declare function classifyStatus(ctx: ForecastContext): ForecastStatusType;
export type GradeOutcome = 'W' | 'L' | 'P';
export declare function deriveGrade(predictedWinner: string | null, actualWinner: string | null): GradeOutcome | null;
export declare function classifyDailyPickTier(mcProb: number | null, algoVersion?: string | null, lockLevel?: string | null): string;
export declare function deriveScores(actualSpread: number | null, actualTotal: number | null): {
    homeScore: number;
    awayScore: number;
} | null;
export declare function formatClosingLine(oddsData: any, predictedWinner: string | null, homeTeam: string | null): string | null;
export declare function formatForecastLine(forecastData: any, predictedWinner: string | null, homeTeam: string | null): string | null;
export declare function formatPlayerForecastLine(actionType: string, direction: string | null, actionValue: number | null): string | null;
export declare function formatPlayerClosingLine(actionType: string, actionValue: number | null): string | null;
//# sourceMappingURL=forecast-lifecycle.d.ts.map