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

namespace Ladaer.BackEnd.Infrastructures.DTO.Items.Finances
{
    /// <summary>
    /// Đơn hàng có thể đối soát
    /// </summary>
    public class ReconciliableOrderItem : BaseItem<int>
    {
        /// <summary>
        /// Mã đơn hàng
        /// </summary>
        public string Code { get; set; } = string.Empty;

        /// <summary>
        /// Mã đối tác
        /// </summary>
        public string PartnerCode { get; set; } = string.Empty;

        /// <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>
        /// Tiền COD
        /// </summary>
        public decimal CodAmount { get; set; }

        /// <summary>
        /// Phí dịch vụ (có thể trừ vào COD)
        /// </summary>
        public decimal ServiceFee { get; set; }

        /// <summary>
        /// Tiền đối soát dựa trên PayFeeType
        /// </summary>
        public decimal ReconciliationAmount { get; set; }

        /// <summary>
        /// Tiền thực tế = ReconciliationAmount (đã tính theo logic PayFeeType)
        /// </summary>
        public decimal NetAmount => ReconciliationAmount;

        /// <summary>
        /// Trạng thái COD
        /// </summary>
        public OrderCodStage CodStage { get; set; }

        /// <summary>
        /// Trạng thái COD dạng string
        /// </summary>
        public string CodStageStr => CodStage.GetDescription();

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

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

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

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

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

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

        /// <summary>
        /// Địa chỉ giao hàng
        /// </summary>
        public string DeliveryAddress { get; set; } = string.Empty;

        /// <summary>
        /// Tên người nhận
        /// </summary>
        public string ReceiverName { get; set; } = string.Empty;

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

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

        /// <summary>
        /// Có được chọn để đối soát không
        /// </summary>
        public bool IsSelected { get; set; }

        /// <summary>
        /// Có thể đối soát không (CodStage = Head)
        /// </summary>
        public bool CanReconcile => CodStage == OrderCodStage.Head;
    }
}
