package busthreaded;

import java.util.*;

/**
 * @author Daniel "3ICE" Berezvai
 */
public class TestBuslines {

public static void main(String[] args) throws InterruptedException {
  new TestBuslines().doRun();
}
private List<Station> stations;
private List<Busline> buslines;
private List<Passenger> passengers;

public void doRun() throws InterruptedException {

  Station altonaStation = new Station("Altona Station"),
          badleyStation = new Station("Badley Station"),
          copehamStation = new Station("Copeham Station");

  stations = new ArrayList<>();
  stations.add(altonaStation);
  stations.add(badleyStation);
  stations.add(copehamStation);

  Busline line1 = new Busline(1, 2),
          line2 = new Busline(2, 3);

  buslines = new ArrayList<>();
  buslines.add(line1);
  buslines.add(line2);

  newStop(8, 0, line1, altonaStation);
  newStop(8, 15, line1, copehamStation);
  newStop(8, 20, line2, badleyStation);
  newStop(8, 25, line1, badleyStation);
  newStop(8, 30, line2, altonaStation);
  newStop(8, 35, line2, copehamStation);
  newStop(8, 40, line1, altonaStation);

  for (Busline busline : buslines) {
    new Thread(busline).start();
  }

  passengers = new ArrayList<>();
  setTimestamp(7, 55);
  Clock.getInstance().start();
  Timer printTimer = new Timer();
  printTimer.schedule(new TimerTask() {
  @Override
  public void run() {
    printBusLines();
  }
  }, 0, 100);
  newPassenger("Atkins", altonaStation, copehamStation);
  Thread.sleep(100);
  newPassenger("Bertha", altonaStation, badleyStation);
  Thread.sleep(100);
  newPassenger("Chat", altonaStation, copehamStation);
  Thread.sleep(200);
  newPassenger("Devon", copehamStation, altonaStation);
  Thread.sleep(2000);

  //Kill all threads:
  for (Busline busline : buslines) {
    busline.stop();
  }
  Clock.getInstance().stop();
  printTimer.cancel();
}

private void setTimestamp(int hour, int minute) {
  Clock.getInstance().setClock(hour, minute);
}

private void newStop(int hour, int minute, Busline line, Station station) {
  setTimestamp(hour, minute);
  line.add(new Stop(station, Clock.getInstance().getTime()));
}

private void printBusLines() {
  System.out.println("The time is " + Clock.getInstance());
  for (Station station : stations) {
    System.out.print(station);
  }
  for (Busline busline : buslines) {
    System.out.print(busline);
  }
  System.out.println();

}

private void newPassenger(String name, Station startStation, Station destination) {
  Passenger p = new Passenger(name, destination);
  passengers.add(p);
  startStation.add(p);
}
}
