package uebung09.iterator;

import java.util.ArrayList;
import java.util.Iterator;

public class Array2dIterator<T> implements Iterator<T>{

    private T[][] array;
    private ArrayList<T> list;
    private int index = 0;

    public Array2dIterator(T[][] array) {
        this.array = array;
        list = flatten();
    }

    @Override
    public boolean hasNext() {
        // for (int i = 0; i < array.length; i++) {
        //     for (int j = 0; j < array[i].length; j++) {
        //         if (array[i][j+1] != null) {
        //             return true;
        //         }
        //         if (array[i+1][j] != null) {
        //             return true;
        //         }
        //     }
        // }
        // return false;

            
        if (list.get(index)) {
            return true;
        } else {
            return false;
        }


        // return true;
    }

    @Override
    public T next() {
    //     for (int i = 0; i < array.length; i++) {
    //         for (int j = 0; j < array[i].length; j++) {
    //             if (array[i][j+1] != null) {
    //                 return array[i][j+1];
    //             }

    //         }
    //         if (array[i+1][0] != null) {
    //             return array[i+1][0];
    //         }
    //     }
    //     return null;


        return list.get(index++);

    }

    private ArrayList<T> flatten(){
        ArrayList<T> list = new ArrayList<>();    

        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                list.add(array[i][j]);
            }
        }

        return list;
    }
}
