using AyCode.Core.Enums;
using AyCode.Core.Interfaces;

namespace AyCode.Core.Extensions;

public static class CollectionExtensionsInt
{
    public static void UpdateCollection<TDataItem>(this IList<TDataItem> source, IList<TDataItem> dataItems, bool isRemove) where TDataItem : IId<int>
    {
        if (source == null) throw new ArgumentNullException(nameof(source), $"source == null");
        if (dataItems == null) throw new ArgumentNullException(nameof(dataItems), $"dataItems == null");

        foreach (var dataItem in dataItems)
        {
            source.UpdateCollection(dataItem, isRemove);
        }
    }

    public static TrackingState UpdateCollection<TDataItem>(this IList<TDataItem> source, TDataItem dataItem, bool isRemove) where TDataItem : IId<int>
    {
        if (source == null) throw new ArgumentNullException(nameof(source), $"source == null");
            
        var index = source.FindIndex(x => x.Id == dataItem.Id);
        return source.UpdateCollectionByIndex(index, dataItem, isRemove);
    }
}