namespace Ladaer.BackEnd.Infrastructures.DTO.Reports.Items.Orders
{
    /// <summary>
    /// Bản ghi báo cáo doanh thu đơn hàng theo ngày
    /// </summary>
    public class OrderRevenueItem
    {
        public DateTime OrderDate { 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 OrderDateStr => OrderDate == DateTime.MinValue ? "TỔNG CỘNG" : OrderDate.ToString("dd/MM/yyyy");

        public int TotalOrders { get; set; }

        // Tổng doanh số và tiền thu hộ
        public decimal TotalRevenue { get; set; }
        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
        public int Picked { get; set; }
        public decimal PickedRevenue { get; set; }
        public decimal PickedCollectAmount { get; set; }

        // Nhập kho
        public int InWarehouse { get; set; }
        public decimal InWarehouseRevenue { get; set; }
        public decimal InWarehouseCollectAmount { get; set; }

        // Xuất kho
        public int OutWarehouse { get; set; }
        public decimal OutWarehouseRevenue { get; set; }
        public decimal OutWarehouseCollectAmount { 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ành công
        public int Delivered { get; set; }
        public decimal DeliveredRevenue { get; set; }
        public decimal DeliveredCollectAmount { get; set; }

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

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

        /// <summary>
        /// Tổng số đơn đang xử lý
        /// </summary>
        public int TotalInProgress => WaitPickup + Picking + Picked + InWarehouse + OutWarehouse + Delivering;

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

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

        /// <summary>
        /// Tỷ lệ thành công
        /// </summary>
        public decimal SuccessRate => TotalOrders > 0 ? (decimal)TotalCompleted / TotalOrders * 100 : 0;

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

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

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

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

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

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