using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using XYY.Core.Standard.ExcelHelper.MSExcelHelper;
using XYY.Model.Standard.Dto.order;

namespace XYY.Model.Standard.Channel
{
    #region DHL偏远验证实体类
    public class DHLInputMapping : MSExcelClassMapping<DHLInputModel>
    {
        public DHLInputMapping()
        {
            Map(x => x.weight).Name("重量（KG）");
            Map(x => x.destinationCountryCode).Name("收件人国家二字码");
            Map(x => x.destinationCityName).Name("收件人城市");
            Map(x => x.destinationPostalCode).Name("收件人邮编");
            Map(x => x.plannedShippingDate).Name("邮寄时间");
            Map(x => x.Message).Name("检测结果");
        }
    }
    public class DHLInputModel
    {
        public string accountNumber { get; set; } = "605423734";
        public string originCountryCode { get; set; } = "CN";
        public bool isCustomsDeclarable { get; set; }=false;
        public string originCityName { get; set; } = "GUANGZHOU";
        public string unitOfMeasurement { get; set; } = "metric";
        public decimal length { get; set; } = 0.1m;
        public decimal width { get; set; } = 0.1m;
        public decimal height { get; set; } = 0.1m;
        public decimal weight { get; set; }
        public string destinationCountryCode { get; set; }
        public DateTime plannedShippingDate { get; set; }
        public string destinationCityName { get; set; }
        public string destinationPostalCode { get; set; }

        /// <summary>
        /// 导入后的结果展示
        /// </summary>
        public string Message { get; set; }


    }
    public class DHLWeight
    {
        /// <summary>
        /// 
        /// </summary>
        public decimal volumetric { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public decimal provided { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string unitOfMeasurement { get; set; }
    }

    public class TotalPriceItem
    {
        /// <summary>
        /// 
        /// </summary>
        public string currencyType { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string priceCurrency { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public double price { get; set; }
    }
    public class TotalPriceBreakdownItem
    {
        /// <summary>
        /// 
        /// </summary>
        public string currencyType { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string priceCurrency { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public List<PriceBreakdownItem> priceBreakdown { get; set; }
    }

    public class PriceBreakdownItem
    {
        /// <summary>
        /// 
        /// </summary>
        public string priceType { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string typeCode { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public double? price { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public decimal? rate { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public decimal? basePrice { get; set; }
    }

    public class BreakdownItem
    {
        /// <summary>
        /// 
        /// </summary>
        public string name { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public double price { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public List<PriceBreakdownItem> priceBreakdown { get; set; }
    }

    public class DetailedPriceBreakdownItem
    {
        /// <summary>
        /// 
        /// </summary>
        public string currencyType { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string priceCurrency { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public List<BreakdownItem> breakdown { get; set; }
    }

    public class PickupCapabilities
    {
        /// <summary>
        /// 
        /// </summary>
        public string nextBusinessDay { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string localCutoffDateAndTime { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string GMTCutoffTime { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string pickupEarliest { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string pickupLatest { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string originServiceAreaCode { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string originFacilityAreaCode { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public decimal pickupAdditionalDays { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public decimal pickupDayOfWeek { get; set; }
    }

    public class DeliveryCapabilities
    {
        /// <summary>
        /// 
        /// </summary>
        public string deliveryTypeCode { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string estimatedDeliveryDateAndTime { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string destinationServiceAreaCode { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string destinationFacilityAreaCode { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public decimal deliveryAdditionalDays { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public decimal deliveryDayOfWeek { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public decimal totalTransitDays { get; set; }
    }

    public class ProductsItem
    {
        /// <summary>
        /// 
        /// </summary>
        public string productName { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string productCode { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string localProductCode { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string localProductCountryCode { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string networkTypeCode { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string isCustomerAgreement { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public DHLWeight weight { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public List<TotalPriceItem> totalPrice { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public List<TotalPriceBreakdownItem> totalPriceBreakdown { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public List<DetailedPriceBreakdownItem> detailedPriceBreakdown { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public PickupCapabilities pickupCapabilities { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public DeliveryCapabilities deliveryCapabilities { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string pricingDate { get; set; }
    }

    public class ExchangeRatesItem
    {
        /// <summary>
        /// 
        /// </summary>
        public double currentExchangeRate { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string currency { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string baseCurrency { get; set; }
    }

    public class DHLOutputModel
    {
        /// <summary>
        /// 
        /// </summary>
        public List<ProductsItem> products { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public List<ExchangeRatesItem> exchangeRates { get; set; }
    }
    #endregion

}
