
import java.math.BigDecimal;
import java.util.Calendar;

public class ProductShipperV1 {
    private static final float COST_PER_KILOGRAM = 1.25f;
    private static final float CHRISTMAS_LOADING = 2f;

    public BigDecimal calculateShippingCharges(Product product) {
        float weightInKilograms = product.getWeightInKilograms();
        if (weightInKilograms <= 0) {
            throw new IllegalArgumentException("Product has an invalid weight of " + weightInKilograms);    
        }

        BigDecimal charges = new BigDecimal(weightInKilograms * COST_PER_KILOGRAM);

        return charges.add(new BigDecimal(calculateAdditionalCharges()));
    }

    private float calculateAdditionalCharges() {
        Calendar calendar = Calendar.getInstance();
        int month = calendar.get(Calendar.MONTH);
        int day = calendar.get(Calendar.DAY_OF_MONTH);

        if (duringChristmasPeriod(month, day)) {
            return CHRISTMAS_LOADING;
        }

        return 0f;
    }

    private boolean duringChristmasPeriod(int month, int day) {
        return month == 11 && day > 23 && day < 31;
    }

}
