package ProjectStormtrooper;

public class SetGeneric<T extends DrawingPlane> {
    private T[] _places;
    public int Count;

    public SetGeneric(int count) {
        _places = (T[]) new DrawingPlane[count];
        Count = count;
    }

    public int Insert(T plane) {
        return Insert(plane, 0);
    }

    public int Insert(T plane, int position) {
        // Проверка позиции
        if (position < 0 || position >= Count) {
            return -1;
        }
        // Проверка, что элемент массива по этой позиции пустой
        if (_places[position] != null) {
            // Проверка, что после вставляемого элемента в массиве есть пустой элемент
            int nullIndex = -1;
            for (int i = position + 1; i < Count; i++) {
                if (_places[i] == null) {
                    nullIndex = i;
                    break;
                }
            }
            // Если пустого элемента нет, то выходим
            if (nullIndex < 0) {
                return -1;
            }
            // Сдвиг всех объектов, находящихся справа от позиции до первого пустого элемента
            int j = nullIndex - 1;
            while (j >= position) {
                _places[j + 1] = _places[j];
                j--;
            }
        }
        // Вставка по позиции
        _places[position] = plane;
        return position;
    }

    public T Remove(int position) {
        // Проверка позиции
        if (position < 0 || position >= Count) {
            return null;
        }
        // Удаление объекта из массива, присвоив элементу массива значение null
        T plane = _places[position];
        _places[position] = null;
        return plane;
    }

    public T Get(int position) {
        // Проверка позиции
        if (position < 0 || position >= Count) {
            return null;
        }
        return _places[position];
    }
}