// File: BikePool.java
// Time-stamp: "2005-08-18 12:39:08 calvanese"
// Purpose: Written exam 28/6/2005 - BSC in Production Engineering
//          solution part 2

public class BikePool {

  // representation of the objects
  private String name;
  private Bike[] pool;

  // pubblic methods

  public BikePool(String n, int size) {
    name = n;
    pool = new Bike[size];
  }
  
  public String getShop() {
    return name;
  }
  
  public int getSize() {
    return pool.length;
  }
  
  public void newBike(Bike bike) {
    if (bike != null && getBike(bike.getCode()) == null)
      for (int i = 0; i < pool.length; i++)
        if (pool[i] == null) {
          pool[i] = bike;
          return;
        }
  }
  
  public Bike getBike(String code) {
    for (int i = 0; i < pool.length; i++)
      if ((pool[i] != null) && pool[i].getCode().equals(code))
        return pool[i];
    return null;
  }

  public void removeBike(String code) {
    for (int i = 0; i < pool.length; i++)
      if ((pool[i] != null) && pool[i].getCode().equals(code)) {
        pool[i] = null;
        return;
      }
  }

  public int numBikes() {
    int count = 0;
    for (int i = 0; i < pool.length; i++)
      if (pool[i] != null)
        count++;
    return count;
  }
  
  public String[] bikesForWeight(int weight) {
    String[] res = new String[numBikesForWeight(weight)];
    int pos = 0;
    for (int i = 0; i < pool.length; i++)
      if (pool[i] != null && pool[i].getMinWeight() <= weight &&
          weight <= pool[i].getMaxWeight()) {
        res[pos] = pool[i].getCode();
        pos++;
      }
    return res;
  }

  private int numBikesForWeight(int weight) {
    int count = 0;
    for (int i = 0; i < pool.length; i++)
      if (pool[i] != null && pool[i].getMinWeight() <= weight &&
          weight <= pool[i].getMaxWeight())
        count++;
    return count;
  }
  
}
