using Lada.Framework.Data.Domains.BaseEntities;
using Lada.Framework.Data.Domains.Orders;
using System.ComponentModel.DataAnnotations;

namespace Lada.Framework.Data.Domains.Finance
{
    /// <summary>
    /// Chi tiết đơn hàng trong phiếu đối soát khách hàng
    /// </summary>
    public class CustomerReconciliationSlipDetail : BaseEntityWithKey<int>
    {
        /// <summary>
        /// ID phiếu đối soát
        /// </summary>
        public int CustomerReconciliationSlipId { get; set; }
        public virtual CustomerReconciliationSlip CustomerReconciliationSlip { get; set; }

        /// <summary>
        /// ID đơn hàng
        /// </summary>
        public int OrderId { get; set; }
        public virtual Order Order { get; set; }

        #region Snapshot Data

        /// <summary>
        /// Mã đơn hàng (snapshot)
        /// </summary>
        [MaxLength(128)]
        public string OrderCode { get; set; } = string.Empty;

        /// <summary>
        /// Mã đối tác (snapshot)
        /// </summary>
        [MaxLength(256)]
        public string PartnerCode { get; set; } = string.Empty;

        /// <summary>
        /// Tiền COD của đơn hàng (snapshot)
        /// </summary>
        public decimal AppliedCodAmount { get; set; }

        /// <summary>
        /// Phí vận chuyển của đơn hàng (snapshot)
        /// </summary>
        public decimal AppliedFeeAmount { get; set; }

        /// <summary>
        /// Số tiền ròng = AppliedCodAmount - AppliedFeeAmount
        /// </summary>
        public decimal NetAmount { get; set; }

        /// <summary>
        /// Ngày giao hàng thành công (snapshot)
        /// </summary>
        public DateTimeOffset? DeliveredDate { get; set; }

        /// <summary>
        /// Ngày thu COD (snapshot)
        /// </summary>
        public DateTimeOffset? CodCollectedDate { get; set; }

        /// <summary>
        /// Trọng lượng tính cước (snapshot)
        /// </summary>
        public decimal ChargeWeight { get; set; }

        /// <summary>
        /// Cước vận chuyển (snapshot)
        /// </summary>
        public decimal ShippingFee { get; set; }

        /// <summary>
        /// Địa chỉ giao hàng (snapshot)
        /// </summary>
        [MaxLength(512)]
        public string DeliveryAddress { get; set; } = string.Empty;

        /// <summary>
        /// Tên người nhận (snapshot)
        /// </summary>
        [MaxLength(256)]
        public string ReceiverName { get; set; } = string.Empty;

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

        #endregion

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