using Lada.Framework.Data.Enums;
using Lada.Framework.Infrastructures.Helpers;

namespace Ladaer.BackEnd.Infrastructures.DTO.Items.Business.Warehouse
{
    /// <summary>
    /// Đối tượng đại diện cho một mục đơn hàng nhập kho.
    /// </summary>
    public class InboundOrderItem
    {
        /// <summary>
        /// Mã đơn hàng.
        /// </summary>
        public int Id { get; set; }

        /// <summary>
        /// Mã code của đơn hàng.
        /// </summary>
        public string Code { get; set; }

        /// <summary>
        /// Ghi chú của đơn hàng.
        /// </summary>
        public string Note { get; set; }

        /// <summary>
        /// Trạng thái của đơn hàng.
        /// </summary>
        public OrderStatus Status { get; set; }

        /// <summary>
        /// Tên trạng thái
        /// </summary>
        public string StatusStr => Status.GetDescription();

        /// <summary>
        /// Trạng thái vật lý của đơn hàng.
        /// </summary>
        public OrderPhysicalStatus PhysicalStatus { get; set; }

        /// <summary>
        /// Tên trạng thái vật lý
        /// </summary>
        public string PhysicalStatusStr => PhysicalStatus.GetDescription();

        /// <summary>
        /// Nội dung trạng thái của đơn hàng.
        /// </summary>
        public string StatusContent { get; set; }

        /// <summary>
        /// Hướng của đơn hàng.
        /// </summary>
        public string OrderDirection { get; set; }

        /// <summary>
        /// ID của người phụ trách.
        /// </summary>
        public int PicId { get; set; }

        /// <summary>
        /// Tên người phụ trách.
        /// </summary>
        public string PicUserName { get; set; }

        /// <summary>
        /// Ghi chú khi lấy hàng.
        /// </summary>
        public string PickupNote { get; set; }

        /// <summary>
        /// Ghi chú khi giao hàng.
        /// </summary>
        public string DeliveryNote { get; set; }

        /// <summary>
        /// Trọng lượng tính phí.
        /// </summary>
        public decimal ChargeWeight { get; set; }

        /// <summary>
        /// Số tiền thu hộ.
        /// </summary>
        public decimal CollectAmount { get; set; }

        /// <summary>
        /// Phí bao gồm COD.
        /// </summary>
        public decimal CodIncludeFee { get; set; }

        /// <summary>
        /// Loại phí thanh toán.
        /// </summary>
        public string PayFeeType { get; set; }

        /// <summary>
        /// Phí.
        /// </summary>
        public decimal Fee { get; set; }

        /// <summary>
        /// Giảm giá.
        /// </summary>
        public decimal Discount { get; set; }

        /// <summary>
        /// Phí COD.
        /// </summary>
        public decimal CodFee { get; set; }

        /// <summary>
        /// Tổng phí.
        /// </summary>
        public decimal TotalFee { get; set; }

        /// <summary>
        /// Phí nguồn.
        /// </summary>
        public decimal SourceFee { get; set; }

        /// <summary>
        /// Phí đích.
        /// </summary>
        public decimal DestFee { get; set; }

        /// <summary>
        /// Phí trả lại.
        /// </summary>
        public decimal ReturnFee { get; set; }

        /// <summary>
        /// Phí bảo hiểm.
        /// </summary>
        public decimal InsuranceFee { get; set; }

        #region Sale
        /// <summary>
        /// Đơn hàng của sale nào
        /// </summary>
        public int SaleId { get; set; }
        public string SaleUserName { get; set; }
        #endregion

        /// <summary>
        /// Danh sách tệp phương tiện.
        /// </summary>
        public List<MediaItem> MediaFiles { get; set; } = new List<MediaItem>();

        /// <summary>
        /// Danh sách sản phẩm
        /// </summary>
        public List<OrderPackageItem> OrderPackages { get; set; } = new List<OrderPackageItem>();
        public List<OrderAddressItem> OrderAddresses { get; set; } = new List<OrderAddressItem>();
    }
}
