package sd.model;

/**
 * Enumeração que representa todos os tipos de mensagens possíveis para
 * comunicação distribuída.
 * Estes tipos são usados para a comunicação entre processos dos diferentes
 * componentes
 * do sistema de simulação de tráfego distribuído.
 */
public enum MessageType {

    /**
     * Mensagem para transferir um veículo entre interseções ou processos.
     * Payload: Objeto Vehicle com o estado atual
     */
    VEHICLE_TRANSFER,

    /**
     * Mensagem para atualizar estatísticas em todo o sistema distribuído.
     * Payload: Dados estatísticos (tempos de espera, tamanhos de fila, etc.)
     */
    STATS_UPDATE,

    /**
     * Mensagem para sincronizar a hora de início da simulação em todos os
     * processos.
     * Payload: Timestamp de início (long milissegundos)
     */
    SIMULATION_START,

    /**
     * Mensagem para notificar sobre a geração de um novo veículo.
     * Payload: Parâmetros de geração do veículo
     */
    VEHICLE_SPAWN,

    /**
     * Mensagem para sinalizar o encerramento de um processo.
     * Payload: ID do processo e motivo
     */
    SHUTDOWN,

    /**
     * Mensagem para alterar a política de roteamento durante a simulação.
     * Payload: String com o nome da nova política (RANDOM, SHORTEST_PATH, LEAST_CONGESTED)
     */
    ROUTING_POLICY_CHANGE,

}
