/**
 * RIE Strategy: NBA
 *
 * Full signal stack: PIFF + DIGIMON + DVP + Grok + RAG
 * When DIGIMON unavailable, redistributes to PIFF + Grok.
 */

import { BaseStrategy } from './base.strategy';
import { StrategyProfile, SignalResult, RagInsight } from '../types';

export class NbaStrategy extends BaseStrategy {
  league = 'nba';

  getProfile(): StrategyProfile {
    return {
      league: 'nba',
      signalWeights: {
        grok: 0.30,
        piff: 0.30,
        digimon: 0.25,
        dvp: 0.08,
        rag: 0.07,
      },
      requiredSignals: ['grok'],
      optionalSignals: ['piff', 'digimon', 'dvp', 'rag'],
      ragQueries: [
        'NBA player props defense vs position expected value edge',
        'basketball scoring pace efficiency matchup analysis model',
      ],
    };
  }

  computeComposite(signals: SignalResult[]): number {
    const grok = signals.find((signal) => signal.signalId === 'grok' && signal.available);
    const hasQuantSupport = signals.some(
      (signal) => signal.available && ['piff', 'digimon', 'dvp'].includes(signal.signalId),
    );

    if (grok && !hasQuantSupport) {
      return grok.score;
    }

    return super.computeComposite(signals);
  }

  adjustComposite(base: number, signals: SignalResult[], ragInsights: RagInsight[]): number {
    // If DIGIMON LOCKs >= 3, slight boost (high-confidence miss pattern)
    const digimon = signals.find(s => s.signalId === 'digimon' && s.available);
    if (digimon?.rawData?.lockCount >= 3) {
      return Math.min(base + 0.02, 0.98);
    }
    return base;
  }
}
