package me.ag2s.epublib.util;

import java.util.Collection;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;

public class CollectionUtil {

    /**
     * Wraps an Enumeration around an Iterator
     *
     * @param <T>
     * @author paul.siegmann
     */
    private static class IteratorEnumerationAdapter<T> implements Enumeration<T> {

        private final Iterator<T> iterator;

        public IteratorEnumerationAdapter(Iterator<T> iter) {
            this.iterator = iter;
        }

        @Override
        public boolean hasMoreElements() {
            return iterator.hasNext();
        }

        @Override
        public T nextElement() {
            return iterator.next();
        }
    }

    /**
     * Creates an Enumeration out of the given Iterator.
     *
     * @param <T> g
     * @param it  g
     * @return an Enumeration created out of the given Iterator.
     */
    @SuppressWarnings("unused")
    public static <T> Enumeration<T> createEnumerationFromIterator(
            Iterator<T> it) {
        return new IteratorEnumerationAdapter<>(it);
    }


    /**
     * Returns the first element of the list, null if the list is null or empty.
     *
     * @param <T>  f
     * @param list f
     * @return the first element of the list, null if the list is null or empty.
     */
    public static <T> T first(List<T> list) {
        if (list == null || list.isEmpty()) {
            return null;
        }
        return list.get(0);
    }

    /**
     * Whether the given collection is null or has no elements.
     *
     * @param collection g
     * @return Whether the given collection is null or has no elements.
     */
    public static boolean isEmpty(Collection<?> collection) {
        return collection == null || collection.isEmpty();
    }
}