package buslines;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

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

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

public void doRun() {
  calendar = Calendar.getInstance();

  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);

  passengers = new ArrayList<>();
  setTimestamp(7, 55);
  newPassenger("Atkins", altonaStation, copehamStation);
  printBusLines();
  tick();
  newPassenger("Bertha", altonaStation, badleyStation);
  printBusLines();
  tick();
  newPassenger("Chat", altonaStation, copehamStation);
  printBusLines();
  tick();
  printBusLines();
  tick();
  printBusLines();
  tick();
  newPassenger("Devon", copehamStation, altonaStation);
  printBusLines();
  for (int i = 0; i < 20; i++) {
    tick();
    printBusLines();
  }
}

private void setTimestamp(int hour, int minute) {
  calendar.set(Calendar.HOUR, hour);
  calendar.set(Calendar.MINUTE, minute);
}

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

private void printBusLines() {
  System.out.println("The time is " + calendar.get(Calendar.HOUR) + ":"
                     + calendar.get(Calendar.MINUTE));
  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);
}

private void tick() {
  StringBuilder log = new StringBuilder();
  for (Busline busline : buslines) {
    busline.tick(calendar.getTime(), log);
  }
  System.out.println(log);
  calendar.add(Calendar.MINUTE, 1);
}
}
