using System;
using System.Globalization;

namespace ShippingCostCalculator
{
    public class ShippingStrategy
    {
        public ShippingStrategy(decimal flatRate)
        {
            if (flatRate <= decimal.Zero)
                throw new ArgumentOutOfRangeException("flatRate", "Stawka musi być liczbą większą od zera");

            this.flatRate = flatRate;
        }

        public virtual decimal CalculateShippingCost(float packageWeightInKilograms, Size<float> packageDimensionsInInches, RegionInfo destination)
        {
            if (packageWeightInKilograms <= 0f) 
                throw new ArgumentOutOfRangeException("packageWeightInKilograms", "Waga przesyłki musi być liczbą większą od zera");

            if (packageDimensionsInInches.X <= 0f || packageDimensionsInInches.Y <= 0f)
                throw new ArgumentOutOfRangeException("packageDimensionsInInches", "Wymiary przesyłki muszą być liczbami większymi od zera");


            var shippingCost = decimal.One;

            if(shippingCost <= decimal.Zero)
                throw new ArgumentOutOfRangeException("return", "Zwracana wartość nie zawiera się w dopuszczalnym zakresie");
            
            return shippingCost;
        }

        protected decimal flatRate;
    }
}
