import java.util.Collection;
import java.util.LinkedList;

public class TimedDoor implements Door, EventNotifier {

  private boolean isOpen = false;
  private Collection<Listener> listeners;
  private final long TIME_TO_TRIGGER = 500;

  private class Timer extends Thread {
    private long time = 0;
    private Listener listener;
    public Timer(long time, Listener listener) {
      this.time = time;
      this.listener = listener;
    }
    public void run() {
      try {
        sleep(time);
        listener.notifyEvent();
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }
  }

  public TimedDoor() {
    this.listeners = new LinkedList<Listener>();
    isOpen = true;
  }

  public void close() {
    isOpen = false;
  }

  public boolean isOpen() {
    return isOpen;
  }

  public void open() {
    for (Listener t : listeners) {
      Timer timer = new Timer(TIME_TO_TRIGGER, t);
      timer.start();
    }
  }

  public void registerListener(Listener listener) {
    listeners.add(listener);
  }

}
