using Lada.Framework.Data.Enums;
using Lada.Framework.DTO;
using static Lada.Framework.Data.Enums.OrderFinEnum;

namespace Ladaer.BackEnd.Infrastructures.DTO.Items.Finances
{
    public class TransactionOrderItem : BaseItem<int>
    {
        /// <summary>
        /// ID giao dịch
        /// </summary>
        public Guid TransactionId { 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>
        /// Mã đối tác
        /// </summary>
        public string PartnerCode { get; set; } = string.Empty;

        /// <summary>
        /// Ghi chú đơn hàng
        /// </summary>
        public string OrderNote { get; set; } = string.Empty;

        /// <summary>
        /// Số tiền COD trong giao dịch này
        /// </summary>
        public decimal CodAmount { get; set; }

        /// <summary>
        /// Cước nguồn trong giao dịch này
        /// </summary>
        public decimal SourceFeeAmount { get; set; }

        /// <summary>
        /// Cước đích trong giao dịch này
        /// </summary>
        public decimal DestFeeAmount { get; set; }

        /// <summary>
        /// Tổng tiền từ đơn hàng này trong giao dịch
        /// </summary>
        public decimal TotalAmount => CodAmount + SourceFeeAmount + DestFeeAmount;

        #region Thông tin đơn hàng chi tiết
        /// <summary>
        /// ID khách hàng
        /// </summary>
        public int CustomerId { get; set; }

        /// <summary>
        /// Tên khách hàng
        /// </summary>
        public string CustomerName { 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>
        /// Trọng lượng tính cước
        /// </summary>
        public decimal ChargeWeight { get; set; }

        /// <summary>
        /// Tổng tiền COD của đơn hàng
        /// </summary>
        public decimal OrderCodAmount { get; set; }

        /// <summary>
        /// Cước chính của đơn hàng
        /// </summary>
        public decimal OrderFee { get; set; }

        /// <summary>
        /// Tổng cước của đơn hàng
        /// </summary>
        public decimal OrderTotalFee { get; set; }

        /// <summary>
        /// Loại thanh toán cước
        /// </summary>
        public PayFeeType PayFeeType { get; set; }

        /// <summary>
        /// Tên loại thanh toán cước
        /// </summary>
        public string PayFeeTypeName { get; set; } = string.Empty;

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

        /// <summary>
        /// Tên trạng thái đơn hàng
        /// </summary>
        public string OrderStatusName { get; set; } = string.Empty;

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

        /// <summary>
        /// Ngày cập nhật đơn hàng
        /// </summary>
        public DateTimeOffset OrderUpdatedTime { get; set; }
        #endregion
    }
}