package sd.des;

import sd.model.TrafficLight;

/**
 * Encapsula o contexto de dados para eventos de mudança de estado de semáforos.
 * <p>
 * Este objeto atua como o <i>payload</i> transportado por um {@link SimulationEvent}
 * quando o tipo de evento é relacionado com controlo de tráfego (ex: mudança Verde -> Amarelo).
 * Permite que o motor DES identifique exatamente qual instância de {@link TrafficLight}
 * deve ser atualizada numa determinada interseção e direção.
 */
public class TrafficLightEvent {
    private final TrafficLight light;
    private final String direction;
    private final String intersectionId;
    
    /**
     * Cria um novo payload de evento de semáforo.
     * @param light A instância do objeto semáforo a ser manipulado.
     * @param direction A direção cardeal associada (ex: "North", "East").
     * @param intersectionId O identificador da interseção onde o semáforo reside.
     */
    public TrafficLightEvent(TrafficLight light, String direction, String intersectionId) {
        this.light = light;
        this.direction = direction;
        this.intersectionId = intersectionId;
    }
    
    /**
     * @return A referência direta para o objeto de domínio do semáforo.
     */
    public TrafficLight getLight() {
        return light;
    }
    
    /**
     * @return A direção do fluxo controlado por este semáforo.
     */
    public String getDirection() {
        return direction;
    }
    
    /**
     * @return O ID da interseção pai.
     */
    public String getIntersectionId() {
        return intersectionId;
    }
    
    @Override
    public String toString() {
        return String.format("TrafficLightEvent[%s-%s]", intersectionId, direction);
    }
}