package sd.routing;

import java.util.List;
import java.util.Map;

/**
 * Interface para implementação de políticas de seleção de rotas.
 * 
 * <p>Define o contrato que todas as políticas de roteamento devem seguir.
 * Permite a implementação de diferentes estratégias de roteamento
 * (aleatória, caminho mais curto, menor congestionamento, etc.).</p>
 */
public interface RouteSelector {
    
    /**
     * Seleciona uma rota para um veículo a partir de um ponto de entrada.
     * 
     * @param entryPoint ponto de entrada (E1, E2 ou E3)
     * @param queueSizes mapa com o tamanho das filas em cada interseção (opcional, pode ser null).
     *                   Chave: ID da interseção (ex: "Cr1", "Cr2")
     *                   Valor: número total de veículos em espera nessa interseção
     * @return lista de IDs representando a rota escolhida (ex: ["Cr1", "Cr2", "Cr5", "S"])
     */
    List<String> selectRoute(String entryPoint, Map<String, Integer> queueSizes);
}
