package Repository;

import Model.IVehicle;

public class VehicleRepo implements IRepository {

    private IVehicle[] _vehicles;
    private Integer _capacity;
    private Integer _size;

    public VehicleRepo(Integer capacity) throws IllegalArgumentException {
        if(capacity < 0) {
            throw new IllegalArgumentException("Capacity must be a positive number");
        }
        this._capacity = capacity;
        this._vehicles = new IVehicle[capacity];
        this._size = 0;
    }

    @Override
    public void add(IVehicle vehicle) throws IllegalArgumentException {
        if(_size == _capacity) {
            throw new IllegalArgumentException("Repository is full");
        }
        _vehicles[_size] = vehicle;
        _size++;
    }

    @Override
    public void remove(int index) throws IllegalArgumentException {
        if(_size == 0) {
            throw new IllegalArgumentException("Repository is empty");
        }
        if(index < 0 || index > _size) {
            throw new IllegalArgumentException("Index out of bounds");
        }
        for(int i = index; i < _size - 1; i++) {
            _vehicles[i] = _vehicles[i + 1];
        }
        _size--;
    }

    @Override
    public IVehicle[] getAll() {
        IVehicle[] copy = new IVehicle[_size];
        for(int i = 0; i < _size; i++) {
            copy[i] = _vehicles[i];
        }
        return copy;
    }

    @Override
    public int getSize() {
        return _size;
    }
    

}
