using Grand.Infrastructure.Models;

namespace Grand.Web.Models.ShoppingCart
{
    public class OrderTotalsModel : BaseModel
    {
        public bool IsEditable { get; set; }

        public string SubTotal { get; set; }
        public bool SubTotalIncludingTax { get; set; }
        public double SubTotalValue { get; set; }

        public string SubTotalDiscount { get; set; }
        public double SubTotalDiscountValue { get; set; }

        public string Shipping { get; set; }
        public bool RequiresShipping { get; set; }
        public string SelectedShippingMethod { get; set; }

        public string PaymentMethodAdditionalFee { get; set; }
        public double PaymentMethodAdditionalFeeValue { get; set; }

        public string Tax { get; set; }
        public IList<TaxRate> TaxRates { get; set; } = new List<TaxRate>();
        public bool DisplayTax { get; set; }
        public bool DisplayTaxRates { get; set; }


        public IList<GiftVoucher> GiftVouchers { get; set; } = new List<GiftVoucher>();

        public string OrderTotalDiscount { get; set; }
        public double OrderTotalDiscountValue { get; set; }

        public int RedeemedLoyaltyPoints { get; set; }
        public string RedeemedLoyaltyPointsAmount { get; set; }

        public int WillEarnLoyaltyPoints { get; set; }

        public string OrderTotal { get; set; }
        public double OrderTotalValue { get; set; }

        public HashSet<string> Discounts { get; set; } = new();

        #region Nested classes

        public class TaxRate: BaseModel
        {
            public string Rate { get; set; }
            public string Value { get; set; }
        }

        public class GiftVoucher : BaseEntityModel
        {
            public string CouponCode { get; set; }
            public string Amount { get; set; }
            public string Remaining { get; set; }
        }
        #endregion
    }
}