namespace PkmnLib.Static.Utils;

/// <summary>
/// Extension methods for <see cref="IEnumerable{T}"/>.
/// </summary>
public static class EnumerableHelpers
{
    /// <summary>
    /// Returns all elements of the enumerable that are not null.
    /// </summary>
    public static IEnumerable<T> WhereNotNull<T>(this IEnumerable<T?> enumerable) where T : class =>
        enumerable.Where(x => x is not null)!;
    
    /// <summary>
    /// Finds the index of a value in an enumerable. Returns -1 if the value is not found.
    /// </summary>
    public static int IndexOf<T>(this IEnumerable<T> enumerable, T value)
    {
        var index = 0;
        foreach (var item in enumerable)
        {
            if (item is null)
            {
                if (value is null)
                    return index;
                continue;
            }
            if (item.Equals(value))
                return index;

            index++;
        }

        return -1;
    }
}