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 đối soát
    /// </summary>
    public class ReconciliationOrder : BaseEntityWithKey<int>
    {
        /// <summary>
        /// ID của bảng đối soát
        /// </summary>
        public int ReconciliationId { get; set; }
        public virtual Reconciliation Reconciliation { get; set; }

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

        /// <summary>
        /// Mã đơn hàng (snapshot tại thời điểm đối soát)
        /// </summary>
        [MaxLength(128)]
        public string OrderCode { get; set; } = string.Empty;

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

        /// <summary>
        /// Tiền COD của đơn hàng này (snapshot tại thời điểm đối soát)
        /// </summary>
        public decimal CodAmount { get; set; }

        /// <summary>
        /// Phí trừ cho đơn hàng này (nếu có)
        /// Có thể là phí dịch vụ, phí chuyển khoản, etc.
        /// </summary>
        public decimal FeeAmount { get; set; }

        /// <summary>
        /// Tiền thực tế cho đơn hàng này = CodAmount - FeeAmount
        /// </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>
        /// Ghi chú riêng cho đơn hàng này trong đối soát
        /// </summary>
        [MaxLength(512)]
        public string Note { get; set; } = string.Empty;

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