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

namespace Ladaer.BackEnd.Infrastructures.DTO.Reports.Results
{
    /// <summary>
    /// Kết quả báo cáo sản lượng
    /// </summary>
    public class OrderProductionResult : BaseResult
    {
        private List<OrderProductionItem> _items = new List<OrderProductionItem>();

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

        public OrderProductionItem OrderProductionTotalItem { get; private set; } = new OrderProductionItem();
        public double TotalRecord { get; set; }

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

            OrderProductionTotalItem = new OrderProductionItem
            {
                OrderDate = DateTime.MinValue, // Ngày tổng hợp
                TotalOrders = _items.Sum(x => x.TotalOrders),
                WaitPickup = _items.Sum(x => x.WaitPickup),
                Picking = _items.Sum(x => x.Picking),
                PickupFailed = _items.Sum(x => x.PickupFailed),
                InTransit = _items.Sum(x => x.InTransit),
                Delivering = _items.Sum(x => x.Delivering),
                Delivered = _items.Sum(x => x.Delivered),
                DeliveryFailed = _items.Sum(x => x.DeliveryFailed),
                Cancelled = _items.Sum(x => x.Cancelled),
                LostOrDamaged = _items.Sum(x => x.LostOrDamaged),
                InStorage = _items.Sum(x => x.InStorage)
            };
        }

        /// <summary>
        /// Thêm item vào danh sách và tự động cập nhật tổng
        /// </summary>
        public void AddItem(OrderProductionItem 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();
        }
    }
}