/**
 * Event Scheduler
 * Manages periodic event spawning and scheduling
 */

import { EventManager } from './EventManager';
import { worldEvents } from '../data/worldEvents';

export class EventScheduler {
  store: any;
  eventManager: EventManager;
  checkInterval: any;
  
  constructor(gameStore: any) {
    this.store = gameStore;
    this.eventManager = new EventManager(gameStore);
    this.checkInterval = null;
  }

  /**
   * Start the event scheduler
   * @param {number} checkIntervalMs - How often to check for events (default 60 seconds)
   */
  start(checkIntervalMs = 60000) {
    this.stop(); // Clear any existing interval

    // Initial check
    this.checkForEvents();

    // Set up recurring checks
    this.checkInterval = setInterval(() => {
      this.checkForEvents();
    }, checkIntervalMs);
  }

  /**
   * Check for and spawn eligible events
   */
  checkForEvents() {
    const { world, player } = this.store.getState();

    worldEvents.forEach(eventDef => {
      // Check if event can spawn
      if (this.eventManager.canSpawnEvent(eventDef)) {
        // Random chance check
        if (Math.random() < (eventDef.spawnConditions.randomChance || 0.1)) {
          this.eventManager.spawnEvent(eventDef);
        }
      }
    });
  }

  /**
   * Force spawn a specific event (for testing/debugging)
   * @param {string} eventId - Event ID to spawn
   * @returns {boolean} - Success
   */
  forceSpawnEvent(eventId) {
    const eventDef = worldEvents.find(e => e.id === eventId);
    if (!eventDef) {
      console.error('Event not found:', eventId);
      return false;
    }

    return this.eventManager.spawnEvent(eventDef);
  }

  /**
   * Stop the event scheduler
   */
  stop() {
    if (this.checkInterval) {
      clearInterval(this.checkInterval);
      this.checkInterval = null;
    }
  }

  /**
   * Cleanup (call on unmount)
   */
  cleanup() {
    this.stop();
    this.eventManager.cleanup();
  }
}

