/**
 * RIE — Signal Registry
 *
 * Central registry for all intelligence signals. Each signal registers itself
 * with supported leagues. The collector queries the registry to find applicable
 * signals for a given matchup.
 */

import { Signal } from './types';

class SignalRegistryImpl {
  private signals = new Map<string, Signal>();

  register(signal: Signal): void {
    this.signals.set(signal.id, signal);
  }

  get(id: string): Signal | undefined {
    return this.signals.get(id);
  }

  getForLeague(league: string): Signal[] {
    const result: Signal[] = [];
    for (const signal of this.signals.values()) {
      if (
        signal.supportedLeagues.includes('*') ||
        signal.supportedLeagues.includes(league.toLowerCase())
      ) {
        result.push(signal);
      }
    }
    return result;
  }

  getAll(): Signal[] {
    return Array.from(this.signals.values());
  }

  has(id: string): boolean {
    return this.signals.has(id);
  }
}

// Global singleton
const registry = new SignalRegistryImpl();

export function getSignalRegistry(): SignalRegistryImpl {
  return registry;
}

export function registerSignal(signal: Signal): void {
  registry.register(signal);
}
