/**
 * Laboratorio, paso 2: el costo de cada envío se calcula con una cadena de
 * instanceof. Reemplácenla por un override de un método en cada subclase de
 * Shipment; ShippingCalculatorTest debe seguir pasando sin cambios.
 */
public class ShippingCalculator {

    /** Costo en céntimos. */
    public static long cost(Shipment s) {
        int kilos = (s.grams() + 999) / 1000;   // kilo o fracción
        if (s instanceof Letter) {
            return 500;
        } else if (s instanceof Parcel) {
            return 800L * kilos;
        } else if (s instanceof Pallet) {
            return 20_000 + 150L * kilos;
        } else {
            throw new IllegalArgumentException("tipo de envío desconocido");
        }
    }
}
