package javalabs.lab4.third;

import javalabs.lab4.first.Vehicle;

import java.util.Arrays;

/**
 * Класс-контейнер для хранения массива объектов Point (и его потомков).
 * Реализует методы подсчета объектов каждого типа, а также безопасные Add и Pop.
 */
public class PointContainer {
    private Point[] _points;

    public PointContainer() {
        this._points = new Point[0];
    }

    public PointContainer(Point[] points) {
        _points = points != null ? points : new Point[0];
    }

    public boolean addPoint(Point point) {
        if (point != null) {
            Point[] newPoints = Arrays.copyOf(_points, _points.length + 1);
            newPoints[newPoints.length - 1] = point;
            _points = newPoints;
            return true;
        }
        return false;
    }

    public Point popPoint() {
        if (_points.length > 0) {
            Point[] newPoints = Arrays.copyOf(_points, _points.length - 1);
            Point pointToReturn = _points[_points.length - 1];
            _points = newPoints;
            return pointToReturn;
        }
        return null;
    }


    public void countPointsByType() {
        int point2dCount = 0;
        int point3dCount = 0;

        for (Point point : _points) {
            if (point instanceof Point3D) {
                point3dCount++;
            } else if (point.getClass() == Point.class) {
                point2dCount++;
            }
        }

        System.out.println("\n*** Подсчет точек по типу ***");
        System.out.println("Point (2D): " + point2dCount);
        System.out.println("Point3D (3D): " + point3dCount);
        System.out.println("Всего точек: " + _points.length);
        System.out.println("*****************************");
    }

    public void displayAllPointsInfo() {
        System.out.println("\n--- СПИСОК ВСЕХ ТОЧЕК В КОНТЕЙНЕРЕ ---");
        for (Point point : _points) {
            point.displayInfo();
        }
    }
}