package sd.logging;

/**
 * Taxonomia oficial de eventos para o subsistema de logging centralizado.
 * <p>
 * Este enumerado padroniza a categorização de todas as ocorrências na simulação, permitindo:
 * <ul>
 * <li>Filtragem granular de logs (ex: ver apenas erros ou apenas tráfego de rede).</li>
 * <li>Análise estatística post-mortem (parsear logs para calcular latências).</li>
 * <li>Correlação de eventos distribuídos (seguir o rastro de um veículo através de vários nós).</li>
 * </ul>
 */
public enum EventType {
    // --- Ciclo de Vida do Veículo ---
    VEHICLE_GENERATED("Vehicle Generated"),
    VEHICLE_ARRIVED("Vehicle Arrived"),
    VEHICLE_QUEUED("Vehicle Queued"),
    VEHICLE_DEPARTED("Vehicle Departed"),
    VEHICLE_EXITED("Vehicle Exited"),
    
    // --- Controlo de Semáforos e Exclusão Mútua ---
    LIGHT_CHANGED_GREEN("Light Changed to Green"),
    LIGHT_CHANGED_RED("Light Changed to Red"),
    LIGHT_REQUEST_GREEN("Light Requested Green"),
    LIGHT_RELEASE_GREEN("Light Released Green"),
    
    // --- Ciclo de Vida da Simulação/Processos ---
    SIMULATION_STARTED("Simulation Started"),
    SIMULATION_STOPPED("Simulation Stopped"),
    PROCESS_STARTED("Process Started"),
    PROCESS_STOPPED("Process Stopped"),
    
    // --- Configuração e Telemetria ---
    STATS_UPDATE("Statistics Update"),
    CONFIG_CHANGED("Configuration Changed"),
    
    // --- Camada de Rede (TCP/Sockets) ---
    CONNECTION_ESTABLISHED("Connection Established"),
    CONNECTION_LOST("Connection Lost"),
    MESSAGE_SENT("Message Sent"),
    MESSAGE_RECEIVED("Message Received"),
    
    // --- Tratamento de Exceções ---
    ERROR("Error");
    
    private final String displayName;
    
    EventType(String displayName) {
        this.displayName = displayName;
    }
    
    public String getDisplayName() {
        return displayName;
    }
    
    @Override
    public String toString() {
        return displayName;
    }
}