/**
 * Abstract Scheduler class - foundation for agent activation scheduling
 */
import { EventEmitter } from 'eventemitter3';
import type { Agent } from '../agents/Agent';
/**
 * Abstract Scheduler class controlling agent activation order
 *
 * Responsibilities:
 * - Determine order of agent updates each simulation step
 * - Manage agent registration/deregistration
 * - Provide scheduling statistics and monitoring
 * - Handle agent lifecycle events
 *
 * Educational Context: Represents different approaches to
 * community organization and decision-making processes,
 * from random consultation to structured hierarchies.
 */
export declare abstract class Scheduler extends EventEmitter {
    /** Agents managed by this scheduler */
    protected agents: Set<Agent>;
    /** Current step number */
    protected stepNumber: number;
    /** Performance tracking */
    protected lastStepTime: number;
    protected totalSteps: number;
    /** Random seed for deterministic scheduling */
    protected randomSeed: number | undefined;
    constructor(randomSeed?: number);
    /**
     * Add agent to scheduling
     */
    addAgent(agent: Agent): void;
    /**
     * Remove agent from scheduling
     */
    removeAgent(agent: Agent): boolean;
    /**
     * Get all scheduled agents
     */
    getAgents(): ReadonlyArray<Agent>;
    /**
     * Get number of scheduled agents
     */
    getAgentCount(): number;
    /**
     * Execute one simulation step
     */
    step(): void;
    /**
     * Reset scheduler state
     */
    reset(): void;
    /**
     * Get current step number
     */
    getCurrentStep(): number;
    /**
     * Get total steps executed
     */
    getTotalSteps(): number;
    /**
     * Get last step execution time in milliseconds
     */
    getLastStepTime(): number;
    /**
     * Get scheduling statistics
     */
    getStatistics(): SchedulerStatistics;
    /**
     * Abstract method: Get agent activation order
     * Must be implemented by concrete scheduler types
     */
    protected abstract getActivationOrder(): ReadonlyArray<Agent>;
    /**
     * Abstract method: Get scheduler type name
     * Must be implemented by concrete scheduler types
     */
    protected abstract getSchedulerType(): string;
    /**
     * Hook for subclasses when agent is added
     */
    protected onAgentAdded(_agent: Agent): void;
    /**
     * Hook for subclasses when agent is removed
     */
    protected onAgentRemoved(_agent: Agent): void;
    /**
     * Initialize random number generator with seed
     */
    private initializeRandom;
}
/**
 * Scheduler statistics interface
 */
export interface SchedulerStatistics {
    readonly totalAgents: number;
    readonly activeAgents: number;
    readonly currentStep: number;
    readonly totalSteps: number;
    readonly lastStepTime: number;
    readonly averageStepTime: number;
    readonly schedulerType: string;
}
//# sourceMappingURL=Scheduler.d.ts.map