using Lada.Framework.DTO;
using Lada.Framework.Infrastructures.Helpers;

namespace Ladaer.BackEnd.Infrastructures.DTO.Items.Orders
{
    /// <summary>
    /// DTO item cho xuất Excel đơn hàng cơ bản
    /// </summary>
    public class BasicOrderExportItem : BaseItem<int>
    {
        #region Thông tin cơ bản
        /// <summary>
        /// ID đơn hàng
        /// </summary>
        public int OrderId { get; set; }

        /// <summary>
        /// Mã đơn hàng
        /// </summary>
        public string OrderCode { get; set; } = string.Empty;

        /// <summary>
        /// Mã đối tác
        /// </summary>
        public string PartnerCode { get; set; } = string.Empty;

        /// <summary>
        /// Tên khách hàng
        /// </summary>
        public string CustomerName { get; set; } = string.Empty;

        /// <summary>
        /// Tên Sale
        /// </summary>
        public string SaleName { get; set; } = string.Empty;
        #endregion

        #region Thông tin địa chỉ
        /// <summary>
        /// Tên người gửi
        /// </summary>
        public string SenderName { get; set; } = string.Empty;

        /// <summary>
        /// Địa chỉ người gửi
        /// </summary>
        public string SenderAddress { get; set; } = string.Empty;

        /// <summary>
        /// Số điện thoại người gửi
        /// </summary>
        public string SenderPhone { get; set; } = string.Empty;

        /// <summary>
        /// Tên người nhận
        /// </summary>
        public string ReceiverName { get; set; } = string.Empty;

        /// <summary>
        /// Địa chỉ người nhận
        /// </summary>
        public string ReceiverAddress { get; set; } = string.Empty;

        /// <summary>
        /// Số điện thoại người nhận
        /// </summary>
        public string ReceiverPhone { get; set; } = string.Empty;
        #endregion

        #region Thông tin trạng thái
        /// <summary>
        /// Trạng thái đơn hàng
        /// </summary>
        public string OrderStatus { get; set; } = string.Empty;

        /// <summary>
        /// Trạng thái vật lý đơn hàng
        /// </summary>
        public string OrderPhysicalStatus { get; set; } = string.Empty;
        #endregion

        #region Thông tin cơ bản về cước phí
        /// <summary>
        /// Khối lượng tính cước (gram)
        /// </summary>
        public int ChargeWeight { get; set; }

        /// <summary>
        /// Khối lượng tính cước (kg) - hiển thị
        /// </summary>
        public decimal ChargeWeightKg => ChargeWeight / 1000m;

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

        /// <summary>
        /// Tổng cước phí (formatted)
        /// </summary>
        public string TotalFeeFormatted => TotalFee.FormatCurrency();

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

        /// <summary>
        /// Số tiền thu hộ (formatted)
        /// </summary>
        public string CollectAmountFormatted => CollectAmount.FormatCurrency();

        /// <summary>
        /// Loại thanh toán cước phí
        /// </summary>
        public string PayFeeType { get; set; } = string.Empty;
        #endregion

        #region Thông tin thời gian
        /// <summary>
        /// Thời gian tạo đơn hàng
        /// </summary>
        public DateTimeOffset? OrderCreatedTime { get; set; }

        /// <summary>
        /// Thời gian tạo đơn hàng (formatted)
        /// </summary>
        public string OrderCreatedTimeFormatted => OrderCreatedTime?.ToString("dd/MM/yyyy HH:mm") ?? "";

        /// <summary>
        /// Thời gian lấy hàng thành công
        /// </summary>
        public DateTimeOffset? PickupTime { get; set; }

        /// <summary>
        /// Thời gian lấy hàng thành công (formatted)
        /// </summary>
        public string PickupTimeFormatted => PickupTime?.ToString("dd/MM/yyyy HH:mm") ?? "";

        /// <summary>
        /// Thời gian giao hàng thành công
        /// </summary>
        public DateTimeOffset? DeliveryTime { get; set; }

        /// <summary>
        /// Thời gian giao hàng thành công (formatted)
        /// </summary>
        public string DeliveryTimeFormatted => DeliveryTime?.ToString("dd/MM/yyyy HH:mm") ?? "";
        #endregion

        #region Thông tin hàng hóa
        /// <summary>
        /// Tổng số kiện
        /// </summary>
        public int TotalPackages { get; set; }

        /// <summary>
        /// Tổng khối lượng (gram)
        /// </summary>
        public int TotalWeight { get; set; }

        /// <summary>
        /// Tổng khối lượng (kg) - hiển thị
        /// </summary>
        public decimal TotalWeightKg => TotalWeight / 1000m;

        /// <summary>
        /// Nội dung hàng hóa
        /// </summary>
        public string PackageContent { get; set; } = string.Empty;
        #endregion

        #region Thông tin bổ sung
        /// <summary>
        /// Ghi chú đơn hàng
        /// </summary>
        public string Note { get; set; } = string.Empty;
        #endregion
    }
}
