package com.livingworld.events;

/**
 * Represents a Living World simulation event.
 *
 * <p>Events are immutable data objects that carry information about changes,
 * occurrences, or state transitions within the Living World simulation layer.</p>
 */
public interface LivingWorldEvent {

    /**
     * Returns the event type identifier.
     *
     * @return the event type string (must not be blank)
     */
    String eventType();

    /**
     * Returns the simulation tick at which this event occurred.
     *
     * @return the simulation tick (never negative)
     */
    long simulationTick();

    /**
     * Returns the module ID that generated or published this event.
     *
     * @return the source module ID (may be "core" for core-generated events, but must not be blank)
     */
    String sourceModuleId();
}