/**
 * Weather Report — Daily Precompute Job
 *
 * Generates cached forecasts for today's events at 9:00 AM ET.
 * Per event, produces a precomputed asset board:
 *   - GAME_MARKETS legacy compatibility bundle
 *   - explicit market-family assets (GAME_TOTAL, MLB_RUN_LINE, MLB_F5_SIDE, MLB_F5_TOTAL)
 *   - TEAM_PROPS team bundles
 *   - PLAYER_PROP extracted assets
 *   - MLB_F5 legacy compatibility bundle
 *
 * Hard cap: default 600 forecasts/day → max 200 events per run.
 * Warning threshold: 90% usage triggers monitoring alerts.
 *
 * Usage: npx tsx src/workers/weather-report.ts [--dry-run] [--schedule CUSTOM_NAME]
 */
import 'dotenv/config';
import { ForecastAssetType } from '../services/forecast-asset-taxonomy';
export declare function isWeatherReportEventInWindow(league: string, startsAt: string | Date, now?: Date): boolean;
export interface EventRow {
    event_id: string;
    league: string;
    home_team: string;
    away_team: string;
    home_short: string;
    away_short: string;
    starts_at: string;
    moneyline: any;
    spread: any;
    total: any;
    prop_count: number;
}
interface ForecastPickInsertInput {
    assetId: string;
    eventId: string;
    recommendation: string;
    line: number | null;
    odds: number | null;
    confidence: number | null;
    edge: number | null;
    gradingCategory: string | null;
    signalTier: string | null;
    marketImpliedProbability: number | null;
    projectedProbability: number | null;
    projectedOutcome: number | null;
}
interface ForecastPickInsertSpec {
    sql: string;
    values: Array<string | number | null>;
}
export declare function buildForecastPickInsertSpec(columns: Set<string>, input: ForecastPickInsertInput): ForecastPickInsertSpec;
export declare function buildPlayerPropOddsLookupKey(player: string | null | undefined, statType: string | null | undefined, line: any, direction: string | null | undefined): string;
export declare function fetchEventPlayerPropOddsLookup(event: EventRow): Promise<Map<string, {
    odds: number;
    source: string | null;
}>>;
type MlbNormalizedPropOddsLookupValue = {
    over: number | null;
    under: number | null;
    primarySource: string | null;
    completenessStatus: 'source_complete' | 'multi_source_complete' | 'incomplete' | null;
};
export declare function shouldPersistExtractedPlayerProp(params: {
    league: string;
    teamShort?: string | null;
    canonicalPlayer: string;
    odds?: number | null;
}): boolean;
export declare function hasPersistablePlayerPropPricing(odds: number | null | undefined): boolean;
export interface TeamPropsPersistenceDiagnostics {
    rawPropCount: number;
    filteredPropCount: number;
    publishablePropCount: number;
    playerPropsStored: number;
    supplementalPropCount: number;
    sourceBackedRescueUsed: boolean;
    sourceBackedRescueShortfall: number;
    droppedMissingPricing: number;
    droppedMissingMetadata: number;
    droppedNonRoster: number;
    storeFailures: number;
    candidateCount: number | null;
    publishableCandidateCount: number | null;
    feedRowCount: number | null;
    sourceBackedCandidateCount: number | null;
    sourceBackedSelectedCount: number | null;
    sourceBackedCandidateSource: string | null;
    sourceBackedSuppressionReasons: Record<string, number>;
    sourceBackedRejectedCount: number;
    sourceBackedRejectedReasons: Record<string, number>;
    sourceBackedRejectedPlayers: string[];
    droppedMetadataReasons: Record<string, number>;
    missingPricingPlayers: string[];
    missingMetadataPlayers: string[];
    nonRosterPlayers: string[];
    failedStorePlayers: string[];
}
export declare function summarizeTeamPropsPersistenceDiagnostics(params: {
    league: string;
    teamName: string;
    teamShort?: string | null;
    teamSide: 'home' | 'away';
    propsResult: any;
    propOddsLookup?: Map<string, {
        odds: number;
        source: string | null;
    }>;
    mlbOddsLookup?: Map<string, MlbNormalizedPropOddsLookupValue>;
    mlbCandidateOddsLookup?: Map<string, MlbNormalizedPropOddsLookupValue>;
}): {
    filteredProps: any[];
    diagnostics: TeamPropsPersistenceDiagnostics;
};
export declare function buildSourceBackedTeamPropBundleEntry(params: {
    prop: any;
    league: string;
    teamName: string;
    teamShort?: string | null;
    teamSide: 'home' | 'away';
    marketLookup?: {
        odds: number;
        source: string | null;
    } | null;
}): any | null;
export declare function shouldGenerateMlbF5(event: EventRow, existingRows: Array<{
    forecast_type: string;
}>): boolean;
export declare function getExpectedAssetTypesForEvent(event: EventRow, existingRows: Array<{
    forecast_type: string;
}>): ForecastAssetType[];
export declare function hasRequiredAssetsForSkip(event: EventRow, existingRows: Array<{
    forecast_type: string;
    team_id?: string | null;
}>): boolean;
export declare function canReuseTeamPropsAsset(params: {
    hasTeamProps: boolean;
    playerPropsCount: number;
}): boolean;
export declare function recoverStaleRuns(dateET: string): Promise<number>;
export declare function getMissingMlbSourceBackedAssetTypes(event: EventRow, existingRows: Array<{
    forecast_type: string;
}>): ForecastAssetType[];
export declare function buildAssetBackedPropHighlights(eventId: string): Promise<any[]>;
export declare function hydrateStoredPropHighlights(eventId: string): Promise<void>;
export declare function rehydrateCachedTeamPropsForTeam(event: EventRow, side: 'home' | 'away', dateET: string, runId: string, mlbSnapshot?: any | null, mlbPhase?: any | null): Promise<{
    success: boolean;
    playerPropsExtracted: number;
    assetWrites: number;
    diagnostics: TeamPropsPersistenceDiagnostics;
    reusedCache: boolean;
}>;
export declare function replayTeamPropsForTeam(event: EventRow, side: 'home' | 'away', dateET: string, runId: string | null, mlbSnapshot?: any | null, mlbPhase?: any | null, options?: {
    skipTheOddsVerification?: boolean;
    throwOnSourceQueryError?: boolean;
}): Promise<{
    success: boolean;
    playerPropsExtracted: number;
    assetWrites: number;
    diagnostics: TeamPropsPersistenceDiagnostics;
    staleWrites: number;
}>;
/**
 * Generate TEAM_PROPS forecast for one team
 */
export declare function generateTeamPropsForTeam(event: EventRow, side: 'home' | 'away', dateET: string, runId: string | null, mlbSnapshot?: any | null, mlbPhase?: any | null, options?: {
    skipTheOddsVerification?: boolean;
    throwOnSourceQueryError?: boolean;
}): Promise<{
    success: boolean;
    playerPropsExtracted: number;
    assetWrites: number;
    diagnostics: TeamPropsPersistenceDiagnostics;
}>;
export declare function main(): Promise<number>;
export {};
//# sourceMappingURL=weather-report.d.ts.map