namespace Ladaer.BackEnd.Infrastructures.DTO.Reports.Items.Orders
{
    /// <summary>
    /// Bản ghi báo cáo doanh thu theo sale
    /// </summary>
    public class SaleRevenueItem
    {
        /// <summary>
        /// ID của sale
        /// </summary>
        public int SaleId { get; set; }

        /// <summary>
        /// Tên sale
        /// </summary>
        public string SaleName { get; set; } = "";

        /// <summary>
        /// Số điện thoại sale
        /// </summary>
        public string SalePhoneNumber { get; set; } = "";

        /// <summary>
        /// Tổng số đơn hàng
        /// </summary>
        public int TotalOrders { get; set; }

        /// <summary>
        /// Tổng doanh số
        /// </summary>
        public decimal TotalRevenue { get; set; }

        /// <summary>
        /// Tổng tiền thu hộ
        /// </summary>
        public decimal TotalCollectAmount { get; set; }

        // Chờ lấy hàng
        public int WaitPickup { get; set; }
        public decimal WaitPickupRevenue { get; set; }
        public decimal WaitPickupCollectAmount { get; set; }

        // Đang lấy hàng
        public int Picking { get; set; }
        public decimal PickingRevenue { get; set; }
        public decimal PickingCollectAmount { get; set; }

        // Lấy hàng thất bại
        public int PickupFailed { get; set; }
        public decimal PickupFailedRevenue { get; set; }
        public decimal PickupFailedCollectAmount { get; set; }

        // Đang trung chuyển
        public int Transporting { get; set; }
        public decimal TransportingRevenue { get; set; }
        public decimal TransportingCollectAmount { get; set; }

        // Đang giao hàng
        public int Delivering { get; set; }
        public decimal DeliveringRevenue { get; set; }
        public decimal DeliveringCollectAmount { get; set; }

        // Giao hàng thất bại
        public int DeliveryFailed { get; set; }
        public decimal DeliveryFailedRevenue { get; set; }
        public decimal DeliveryFailedCollectAmount { get; set; }

        // Giao hàng thành công
        public int DeliverySuccess { get; set; }
        public decimal DeliverySuccessRevenue { get; set; }
        public decimal DeliverySuccessCollectAmount { get; set; }

        // Đơn đã hủy
        public int Cancelled { get; set; }
        public decimal CancelledRevenue { get; set; }
        public decimal CancelledCollectAmount { get; set; }

        #region Computed Properties

        /// <summary>
        /// Kiểm tra có phải dòng tổng cộng không
        /// </summary>
        public bool IsTotalRow => SaleId == 0;

        /// <summary>
        /// Tổng số đơn đang xử lý (chưa hoàn thành)
        /// </summary>
        public int TotalInProgress => WaitPickup + Picking + Transporting + Delivering;

        /// <summary>
        /// Tổng số đơn thất bại
        /// </summary>
        public int TotalFailed => PickupFailed + DeliveryFailed + Cancelled;

        /// <summary>
        /// Tổng số đơn hoàn thành
        /// </summary>
        public int TotalCompleted => DeliverySuccess;

        /// <summary>
        /// Tỷ lệ thành công (%)
        /// </summary>
        public double SuccessRate => TotalOrders > 0 ? Math.Round((double)TotalCompleted / TotalOrders * 100, 2) : 0;

        /// <summary>
        /// Tổng doanh số đơn đang xử lý
        /// </summary>
        public decimal TotalInProgressRevenue => WaitPickupRevenue + PickingRevenue + TransportingRevenue + DeliveringRevenue;

        /// <summary>
        /// Tổng doanh số đơn thất bại
        /// </summary>
        public decimal TotalFailedRevenue => PickupFailedRevenue + DeliveryFailedRevenue + CancelledRevenue;

        /// <summary>
        /// Tổng doanh số đơn hoàn thành
        /// </summary>
        public decimal TotalCompletedRevenue => DeliverySuccessRevenue;

        /// <summary>
        /// Tổng tiền thu hộ đơn đang xử lý
        /// </summary>
        public decimal TotalInProgressCollectAmount => WaitPickupCollectAmount + PickingCollectAmount + TransportingCollectAmount + DeliveringCollectAmount;

        /// <summary>
        /// Tổng tiền thu hộ đơn thất bại
        /// </summary>
        public decimal TotalFailedCollectAmount => PickupFailedCollectAmount + DeliveryFailedCollectAmount + CancelledCollectAmount;

        /// <summary>
        /// Tổng tiền thu hộ đơn hoàn thành
        /// </summary>
        public decimal TotalCompletedCollectAmount => DeliverySuccessCollectAmount;

        #endregion
    }
}
