import { _Iterator, ITeratorConfig } from "../types";
/**
 * @description The Iterator class provides a way to traverse through a collection of items sequentially,
 * without exposing the underlying data structure. It supports both forward and backward traversal,
 * optional looping behavior, and methods to manipulate the underlying collection.
 */
export declare class Iterator<T> implements _Iterator<T> {
    private currentIndex;
    private readonly items;
    private lastCommand;
    private readonly returnCurrentOnReversion;
    private readonly restartOnFinish;
    private constructor();
    /**
     * @description Creates a new Iterator instance from the provided configuration.
     * @param config Optional configuration object.
     * @param config.initialData An initial array of items to iterate over.
     * @param config.returnCurrentOnReversion If `true`, when switching iteration direction (from `next` to `prev` or vice versa),
     * the current item will be returned again before moving on.
     * @param config.restartOnFinish If `true`, when reaching the end of the items (`next` beyond last item or `prev` before first item),
     * iteration continues from the opposite end, effectively looping the iteration indefinitely.
     *
     * @returns A new Iterator instance.
     */
    static create<U>(config?: ITeratorConfig<U>): Iterator<U>;
    /**
     * @description Removes a specific item from the iterator's collection.
     * If the item is found and removed, the current index is adjusted accordingly.
     * @param item The item to be removed.
     */
    removeItem(item: T): void;
    /**
     * @description Checks if there is another item after the current position.
     * @returns `true` if another item is available after the current index, otherwise `false`.
     */
    hasNext(): boolean;
    /**
     * @description Checks if there is another item before the current position.
     * @returns `true` if another item is available before the current index, otherwise `false`.
     */
    hasPrev(): boolean;
    /**
     * @description Checks if the iterator has no items.
     * @returns `true` if there are no items, otherwise `false`.
     */
    isEmpty(): boolean;
    /**
     * @description Moves the iterator forward and returns the next item.
     * If `restartOnFinish` is `true` and the end is reached, iteration restarts from the beginning.
     * If `restartOnFinish` is `false` and the end is reached, returns `null`.
     *
     * @returns The next item, or `null` if no next item exists and looping is disabled.
     */
    next(): T;
    /**
     * @description Moves the iterator backward and returns the previous item.
     * If `restartOnFinish` is `true` and the beginning is reached, iteration continues from the end.
     * If `restartOnFinish` is `false` and the beginning is reached, returns `null`.
     *
     * @returns The previous item, or `null` if no previous item exists and looping is disabled.
     */
    prev(): T;
    /**
     * @description Returns the first item in the collection without changing the current index.
     * @returns The first item, or `undefined` if empty.
     */
    first(): T;
    /**
     * @description Returns the last item in the collection without changing the current index.
     * @returns The last item, or `undefined` if empty.
     */
    last(): T;
    /**
     * @description Moves the internal cursor to the start of the collection.
     * @returns The current Iterator instance.
     */
    toFirst(): Iterator<T>;
    /**
     * @description Moves the internal cursor to the end of the collection.
     * @returns The current Iterator instance.
     */
    toLast(): Iterator<T>;
    /**
     * @description Removes all items from the collection.
     * @returns The current Iterator instance.
     */
    clear(): Iterator<T>;
    /**
     * @description Adds a new item to the end of the collection.
     * @param data The item to add.
     * @returns The current Iterator instance.
     */
    addToEnd(data: T): Iterator<T>;
    /**
     * @description Alias for `addToEnd` - adds a new item to the end of the collection.
     * @param data The item to add.
     * @returns The current Iterator instance.
     */
    add(data: T): Iterator<T>;
    /**
     * @description Adds a new item to the start of the collection and resets the cursor to before the first element.
     * @param data The item to add.
     * @returns The current Iterator instance.
     */
    addToStart(data: T): Iterator<T>;
    /**
     * @description Removes the last item from the collection.
     * @returns The current Iterator instance.
     */
    removeLast(): Iterator<T>;
    /**
     * @description Removes the first item from the collection.
     * @returns The current Iterator instance.
     */
    removeFirst(): Iterator<T>;
    /**
     * @description Creates a new Iterator instance with the same configuration and current state as the existing one.
     * @returns A cloned Iterator instance.
     */
    clone(): _Iterator<T>;
    /**
     * @description Returns all items in the iterator as an array.
     * @returns A copy of the internal array of items.
     */
    toArray(): Array<T>;
    /**
     * @description Returns the total number of items in the iterator.
     * @returns The count of items in the underlying collection.
     */
    total(): number;
}
export default Iterator;
//# sourceMappingURL=iterator.d.ts.map