namespace Ladaer.BackEnd.Infrastructures.DTO.Reports.Items.Orders
{
    /// <summary>
    /// Bản ghi báo cáo doanh thu đơn hàng theo ngày nhận tiền (Collection Date)
    /// Chỉ bao gồm thống kê tài chính (không có thống kê trạng thái triển khai)
    /// </summary>
    public class OrderRevenueByCollectionDateItem
    {
        /// <summary>
        /// Ngày công ty nhận tiền
        /// </summary>
        public DateTime CollectionDate { get; set; }

        /// <summary>
        /// Chuỗi hiển thị ngày, nếu là ngày tổng hợp thì hiển thị "TỔNG CỘNG"
        /// </summary>
        public string CollectionDateStr => CollectionDate == DateTime.MinValue ? "TỔNG CỘNG" : CollectionDate.ToString("dd/MM/yyyy");

        /// <summary>
        /// Tổng số đơn (trừ hủy)
        /// </summary>
        public int TotalOrders { get; set; }

        /// <summary>
        /// Tổng doanh thu (trừ hủy)
        /// </summary>
        public decimal TotalRevenue { get; set; }

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

        /// <summary>
        /// Doanh thu chưa thanh toán
        /// </summary>
        public decimal UnpaidRevenue { get; set; }

        /// <summary>
        /// Số đơn chờ xác nhận
        /// </summary>
        public int WaitingConfirmationOrders { get; set; }

        /// <summary>
        /// Doanh thu chờ xác nhận
        /// </summary>
        public decimal WaitingConfirmationRevenue { get; set; }

        /// <summary>
        /// Số đơn đã thanh toán
        /// </summary>
        public int PaidOrders { get; set; }

        /// <summary>
        /// Doanh thu đã thanh toán
        /// </summary>
        public decimal PaidRevenue { get; set; }

        /// <summary>
        /// Doanh thu ghi nhận (đã trừ VAT 8%)
        /// </summary>
        public decimal RecognizedRevenue { get; set; }

        /// <summary>
        /// Kiểm tra xem có phải là dòng tổng cộng không
        /// </summary>
        public bool IsTotalRow => CollectionDate == DateTime.MinValue;

        /// <summary>
        /// Tỷ lệ thanh toán (%)
        /// </summary>
        public decimal PaymentRate => TotalOrders > 0 ? (decimal)PaidOrders / TotalOrders * 100 : 0;

        /// <summary>
        /// Tỷ lệ chưa thanh toán (%)
        /// </summary>
        public decimal UnpaidRate => TotalOrders > 0 ? (decimal)UnpaidOrders / TotalOrders * 100 : 0;

        /// <summary>
        /// Tỷ lệ chờ xác nhận (%)
        /// </summary>
        public decimal WaitingConfirmationRate => TotalOrders > 0 ? (decimal)WaitingConfirmationOrders / TotalOrders * 100 : 0;
    }
}

