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

namespace Ladaer.BackEnd.Infrastructures.DTO.Items.Finance
{
    /// <summary>
    /// DTO item cho tổng hợp khách hàng cần tạo hóa đơn thanh toán chuyển khoản
    /// </summary>
    public class CustomerTransferPaymentSummaryItem : BaseItem<int>
    {
        /// <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>
        /// Số điện thoại khách hàng
        /// </summary>
        public string CustomerPhone { get; set; } = string.Empty;

        /// <summary>
        /// Mã khách hàng
        /// </summary>
        public string CustomerCode { get; set; } = string.Empty;

        /// <summary>
        /// Email khách hàng
        /// </summary>
        public string CustomerEmail { get; set; } = string.Empty;

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

        /// <summary>
        /// Số đơn hàng chưa thanh toán
        /// </summary>
        public int PendingOrderCount { get; set; }

        /// <summary>
        /// Số đơn COD chưa đối soát
        /// </summary>
        public int CodOrderCount { get; set; }

        /// <summary>
        /// Số đơn chuyển khoản chưa thanh toán
        /// </summary>
        public int BankTransferOrderCount { get; set; }

        /// <summary>
        /// Tổng tiền COD chưa đối soát (VNĐ)
        /// </summary>
        public decimal TotalCodAmount { get; set; }

        /// <summary>
        /// Tổng cước của các đơn COD (VNĐ)
        /// </summary>
        public decimal TotalCodFee { get; set; }

        /// <summary>
        /// Tổng tiền chuyển khoản chưa thanh toán (VNĐ)
        /// </summary>
        public decimal TotalTransferFee { get; set; }

        /// <summary>
        /// Số tiền ước tính cần trả khách = TotalCodAmount - TotalCodFee - TotalTransferFee (VNĐ)
        /// </summary>
        public decimal EstimatedNetAmount { get; set; }

        /// <summary>
        /// Số tiền ước tính đã format (VD: "25,500,000 ₫")
        /// </summary>
        public string EstimatedNetAmountFormatted => EstimatedNetAmount.FormatCurrency();

        /// <summary>
        /// Ngày đơn hàng cũ nhất chưa thanh toán
        /// </summary>
        public DateTimeOffset? OldestOrderDate { get; set; }

        /// <summary>
        /// Ngày đơn hàng mới nhất chưa thanh toán
        /// </summary>
        public DateTimeOffset? LatestOrderDate { get; set; }

        /// <summary>
        /// Số ngày từ đơn hàng cũ nhất
        /// </summary>
        public int DaysFromOldest => OldestOrderDate.HasValue 
            ? (int)(DateTimeOffset.Now - OldestOrderDate.Value).TotalDays 
            : 0;

        /// <summary>
        /// Mức độ ưu tiên dựa trên số ngày
        /// </summary>
        public string PriorityLevel
        {
            get
            {
                var days = DaysFromOldest;
                if (days >= 30) return "Cao";
                if (days >= 15) return "Trung bình";
                return "Thấp";
            }
        }

        /// <summary>
        /// ID người quản lý khách hàng
        /// </summary>
        public int ManagerId { get; set; }

        /// <summary>
        /// Tên người quản lý khách hàng
        /// </summary>
        public string ManagerName { get; set; } = string.Empty;

        /// <summary>
        /// Thông tin ngân hàng khách hàng
        /// </summary>
        public string BankAccountNumber { get; set; } = string.Empty;

        /// <summary>
        /// Tên chủ tài khoản
        /// </summary>
        public string BankAccountHolderName { get; set; } = string.Empty;

        /// <summary>
        /// Tên ngân hàng
        /// </summary>
        public string BankName { get; set; } = string.Empty;

        /// <summary>
        /// Có thể tạo hóa đơn không (dựa trên quyền và số đơn hàng)
        /// </summary>
        public bool CanCreateBill { get; set; }
    }
}
