package sd.routing;

/**
 * Enumeração que define as políticas de roteamento disponíveis para a simulação.
 * 
 * <p>As políticas de roteamento determinam como os veículos escolhem o caminho
 * a seguir desde o ponto de entrada até à saída da rede de interseções.</p>
 * 
 * <ul>
 *   <li><strong>RANDOM:</strong> Seleção aleatória de rotas baseada em probabilidades predefinidas</li>
 *   <li><strong>SHORTEST_PATH:</strong> Escolhe sempre a rota com o menor número de cruzamentos</li>
 *   <li><strong>LEAST_CONGESTED:</strong> Escolhe a rota evitando cruzamentos mais congestionados</li>
 * </ul>
 */
public enum RoutingPolicy {
    /**
     * Política aleatória (baseline).
     * Seleciona rotas com base em probabilidades predefinidas, sem considerar
     * o estado atual da rede.
     */
    RANDOM,
    
    /**
     * Política do caminho mais curto.
     * Sempre escolhe a rota com o menor número de cruzamentos entre o ponto
     * de entrada e a saída, minimizando a distância teórica.
     */
    SHORTEST_PATH,
    
    /**
     * Política das menores filas (roteamento dinâmico).
     * Escolhe a rota que passa pelos cruzamentos menos congestionados,
     * com base no tamanho atual das filas em cada interseção.
     */
    LEAST_CONGESTED
}
