using Grand.Infrastructure.Models;
using Grand.Web.Models.Common;

namespace Grand.Web.Models.Orders
{
    public class ShipmentDetailsModel : BaseEntityModel
    {
        public int ShipmentNumber { get; set; }
        public string TrackingNumber { get; set; }
        public string TrackingNumberUrl { get; set; }
        public DateTime? ShippedDate { get; set; }
        public DateTime? DeliveryDate { get; set; }
        public IList<ShipmentStatusEventModel> ShipmentStatusEvents { get; set; } = new List<ShipmentStatusEventModel>();
        public bool ShowSku { get; set; }
        public IList<ShipmentItemModel> Items { get; set; } = new List<ShipmentItemModel>();
        public IList<ShipmentNote> ShipmentNotes { get; set; } = new List<ShipmentNote>();
        public OrderModel Order { get; set; }

		#region Nested Classes

        public class ShipmentItemModel : BaseEntityModel
        {
            public string Sku { get; set; }
            public string ProductId { get; set; }
            public string ProductName { get; set; }
            public string ProductSeName { get; set; }
            public string AttributeInfo { get; set; }
            public string RentalInfo { get; set; }

            public int QuantityOrdered { get; set; }
            public int QuantityShipped { get; set; }
        }

        public class ShipmentStatusEventModel : BaseModel
        {
            public string EventName { get; set; }
            public string Location { get; set; }
            public string Country { get; set; }
            public DateTime? Date { get; set; }
        }
        public class ShipmentNote : BaseEntityModel
        {
            public bool HasDownload { get; set; }
            public string Note { get; set; }
            public DateTime CreatedOn { get; set; }
            public string ShipmentId { get; set; }
        }
        public class OrderModel : BaseEntityModel
        {
            public int OrderNumber { get; set; }
            public string OrderCode { get; set; }
            public string ShippingMethod { get; set; }
            public bool PickUpInStore { get; set; }
            public AddressModel PickupAddress { get; set; }
            public AddressModel ShippingAddress { get; set; }
        }
        #endregion
    }
}