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

namespace Ladaer.BackEnd.Infrastructures.DTO.Items.Finance
{
    /// <summary>
    /// DTO item cho đơn hàng trong hóa đơn thanh toán chuyển khoản
    /// </summary>
    public class TransferPaymentBillOrderItem : BaseItem<int>
    {
        /// <summary>
        /// ID hóa đơn thanh toán
        /// </summary>
        public int TransferPaymentBillId { get; set; }

        /// <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>
        /// Số tiền TransferFee của đơn hàng này
        /// </summary>
        public decimal TransferFeeAmount { get; set; }

        /// <summary>
        /// Số tiền TransferFee (formatted)
        /// </summary>
        public string TransferFeeAmountFormatted => TransferFeeAmount.FormatCurrency();

        /// <summary>
        /// Ghi chú riêng cho đơn hàng này
        /// </summary>
        public string Note { get; set; } = string.Empty;

        /// <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;

        /// <summary>
        /// Ngày tạo đơn hàng
        /// </summary>
        public DateTimeOffset OrderCreatedTime { get; set; }

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

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

        /// <summary>
        /// Trạng thái đơn hàng
        /// </summary>
        public string StatusStr => Status.GetDescription();

        /// <summary>
        /// Trạng thái vật lý đơn hàng
        /// </summary>
        public string PhysicalStatusStr => PhysicalStatus.GetDescription();

        /// <summary>
        /// Thông tin sản phẩm (gộp các package thành chuỗi)
        /// </summary>
        public string ProductInfo { get; set; } = string.Empty;
    }
}
