using Lada.Framework.DTO;
using Ladaer.BackEnd.Infrastructures.DTO.Reports.Items.Orders;

namespace Ladaer.BackEnd.Infrastructures.DTO.Reports.Results
{
    /// <summary>
    /// Kết quả báo cáo doanh thu theo Sale (chỉ thống kê tài chính)
    /// </summary>
    public class OrderRevenueBySaleResult : BaseResult
    {
        private List<OrderRevenueBySaleItem> _items = new List<OrderRevenueBySaleItem>();

        public List<OrderRevenueBySaleItem> Items
        {
            get => _items;
            set
            {
                _items = value ?? new List<OrderRevenueBySaleItem>();
                UpdateTotalItem();
            }
        }

        public OrderRevenueBySaleItem TotalItem { get; private set; } = new OrderRevenueBySaleItem();
        public double TotalRecord { get; set; }

        /// <summary>
        /// Cập nhật TotalItem dựa trên Items
        /// </summary>
        private void UpdateTotalItem()
        {
            if (_items == null || !_items.Any())
            {
                TotalItem = new OrderRevenueBySaleItem();
                return;
            }

            TotalItem = new OrderRevenueBySaleItem
            {
                SaleId = 0,
                SaleName = "TỔNG CỘNG",
                TotalOrders = _items.Sum(x => x.TotalOrders),
                TotalRevenue = _items.Sum(x => x.TotalRevenue),
                UnpaidOrders = _items.Sum(x => x.UnpaidOrders),
                UnpaidRevenue = _items.Sum(x => x.UnpaidRevenue),
                WaitingConfirmationOrders = _items.Sum(x => x.WaitingConfirmationOrders),
                WaitingConfirmationRevenue = _items.Sum(x => x.WaitingConfirmationRevenue),
                PaidOrders = _items.Sum(x => x.PaidOrders),
                PaidRevenue = _items.Sum(x => x.PaidRevenue),
                RecognizedRevenue = _items.Sum(x => x.RecognizedRevenue)
            };
        }

        /// <summary>
        /// Thêm item vào danh sách và tự động cập nhật tổng
        /// </summary>
        public void AddItem(OrderRevenueBySaleItem item)
        {
            if (item != null)
            {
                _items.Add(item);
                UpdateTotalItem();
            }
        }

        /// <summary>
        /// Xóa tất cả items và reset tổng
        /// </summary>
        public void ClearItems()
        {
            _items.Clear();
            UpdateTotalItem();
        }
    }
}


