package com.bookshop.solid.ocp;

import java.math.BigDecimal;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

/**
 * Closed for modification: this class quotes whatever rates it is given and has
 * no idea which shipping options exist. New options never require editing it.
 */
public class ShippingQuotes {

    private final List<ShippingRate> rates;

    public ShippingQuotes(List<ShippingRate> rates) {
        this.rates = List.copyOf(rates);
    }

    public Map<String, BigDecimal> quoteAll(BigDecimal orderTotal) {
        Map<String, BigDecimal> quotes = new LinkedHashMap<>();
        for (ShippingRate rate : rates) {
            quotes.put(rate.name(), rate.costFor(orderTotal));
        }
        return quotes;
    }
}
