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 - mục đích vận hành
    /// </summary>
    public class OperationsOrderExportItem : 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>
        /// Số điện thoại khách hàng
        /// </summary>
        public string CustomerPhone { get; set; } = string.Empty;

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

        /// <summary>
        /// Số điện thoại Sale
        /// </summary>
        public string SalePhone { get; set; } = string.Empty;
        #endregion

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

        /// <summary>
        /// Địa chỉ người gửi đầy đủ
        /// </summary>
        public string SenderFullAddress { 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 đầy đủ
        /// </summary>
        public string ReceiverFullAddress { get; set; } = string.Empty;

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

        /// <summary>
        /// Tỉnh/Thành phố gửi
        /// </summary>
        public string SourceProvince { get; set; } = string.Empty;

        /// <summary>
        /// Quận/Huyện gửi
        /// </summary>
        public string SourceDistrict { get; set; } = string.Empty;

        /// <summary>
        /// Tỉnh/Thành phố nhận
        /// </summary>
        public string DestProvince { get; set; } = string.Empty;

        /// <summary>
        /// Quận/Huyện nhận
        /// </summary>
        public string DestDistrict { get; set; } = string.Empty;
        #endregion

        #region Thông tin vận hành
        /// <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;

        /// <summary>
        /// Hướng đơn hàng (Nội tỉnh/Liên tỉnh)
        /// </summary>
        public string OrderDirection { get; set; } = string.Empty;

        /// <summary>
        /// Tuyến vận chuyển
        /// </summary>
        public string RouteName { get; set; } = string.Empty;

        /// <summary>
        /// Kho hiện tại
        /// </summary>
        public string CurrentWarehouse { get; set; } = string.Empty;

        /// <summary>
        /// Nhân viên phụ trách lấy hàng
        /// </summary>
        public string PickupStaff { get; set; } = string.Empty;

        /// <summary>
        /// Nhân viên phụ trách giao hàng
        /// </summary>
        public string DeliveryStaff { get; set; } = string.Empty;
        #endregion

        #region Thông tin thời gian vận hành
        /// <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ên kế hoạch lấy hàng
        /// </summary>
        public DateTimeOffset? PickupPlanTime { get; set; }

        /// <summary>
        /// Thời gian lên kế hoạch lấy hàng (formatted)
        /// </summary>
        public string PickupPlanTimeFormatted => PickupPlanTime?.ToString("dd/MM/yyyy HH:mm") ?? "";

        /// <summary>
        /// Thời gian triển khai lấy hàng
        /// </summary>
        public DateTimeOffset? DeployPickupTime { get; set; }

        /// <summary>
        /// Thời gian triển khai lấy hàng (formatted)
        /// </summary>
        public string DeployPickupTimeFormatted => DeployPickupTime?.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 triển khai giao hàng
        /// </summary>
        public DateTimeOffset? DeployDeliveryTime { get; set; }

        /// <summary>
        /// Thời gian triển khai giao hàng (formatted)
        /// </summary>
        public string DeployDeliveryTimeFormatted => DeployDeliveryTime?.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>
        /// 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>
        /// Nội dung hàng hóa
        /// </summary>
        public string PackageContent { get; set; } = string.Empty;

        /// <summary>
        /// Giá trị hàng hóa
        /// </summary>
        public decimal PackageValue { get; set; }

        /// <summary>
        /// Giá trị hàng hóa (formatted)
        /// </summary>
        public string PackageValueFormatted => PackageValue.FormatCurrency();
        #endregion

        #region Thông tin cước phí cơ bản
        /// <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;

        /// <summary>
        /// Trạng thái thu COD
        /// </summary>
        public string CodStage { 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;

        /// <summary>
        /// Ghi chú vận hành
        /// </summary>
        public string OperationNote { get; set; } = string.Empty;

        /// <summary>
        /// Độ ưu tiên
        /// </summary>
        public string Priority { get; set; } = string.Empty;

        /// <summary>
        /// Dịch vụ đặc biệt
        /// </summary>
        public string SpecialService { get; set; } = string.Empty;
        #endregion
    }
}
