import type {
  PublicForecastInputQuality,
  PublicForecastLegacyPayloadV1,
  PublicTeamForecastEngine,
  PublicForecastModelSignals,
  PublicFeaturedPlayer,
  PublicForecastNotReadyResponseV1,
  PublicForecastResponseV1,
  PublicGroupedPlayer,
  PublicInsightAvailability,
  PublicMlbMatchupContext,
  PublicMlbPhaseContext,
  PublicMlbPropContext,
  PublicPlayerProp,
  PublicPlayerPropMarket,
  PublicPlayerPropsResponseV1,
  PublicTopGameCard,
  PublicTopPickEntry,
  PublicTopPicksResponseV1,
  PublicTopPropCard,
  PublicTopPropsResponseV1,
} from '../../backend/src/contracts/forecast-public-shared';

export const FORECAST_PUBLIC_CONTRACT_VERSION = 'forecast-public-v1' as const;

export type {
  PublicForecastLegacyPayloadV1,
  PublicTeamForecastEngine,
  PublicForecastModelSignals,
  PublicForecastInputQuality,
  PublicForecastNotReadyResponseV1,
  PublicForecastResponseV1,
  PublicFeaturedPlayer,
  PublicGroupedPlayer,
  PublicInsightAvailability,
  PublicMlbMatchupContext,
  PublicMlbPhaseContext,
  PublicMlbPropContext,
  PublicPlayerProp,
  PublicPlayerPropMarket,
  PublicPlayerPropsResponseV1,
  PublicTopGameCard,
  PublicTopPickEntry,
  PublicTopPicksResponseV1,
  PublicTopPropCard,
  PublicTopPropsResponseV1,
};

export type PublicForecastRouteResponseV1 =
  | PublicForecastResponseV1
  | PublicForecastNotReadyResponseV1;

export function isForecastNotReadyResponse(
  value: PublicForecastRouteResponseV1,
): value is PublicForecastNotReadyResponseV1 {
  return (value as PublicForecastNotReadyResponseV1).status === 'not_ready';
}
