package kevin.lawrence.bowling;

import java.util.ArrayList;
import java.util.Iterator;

public class Game implements Iterable<Frame> {
  public static final int FRAMES_PER_GAME = 10;

  private ArrayList<Frame> frames;

  public Game() {
    frames = new ArrayList<Frame>();
    
    Frame frame = null;
    for(int i = 0; i < FRAMES_PER_GAME; i++) {
      frame = new Frame(frame, i == FRAMES_PER_GAME - 1);
      frames.add(frame);
    }
  }

  public void bowl(int pins) {
    // The current frame is the first one that needs more balls
    // but is not complete
    
    for(Frame frame : frames){
      if(frame.needsMoreBalls()){
        boolean isCurrentFrame = ! frame.isComplete();
        
        frame.addBall(pins);
        
        if(isCurrentFrame) {
          break;
        }
      }
    }
  }

  public boolean isGameOver() {
    return ! getLastFrame().needsMoreBalls();
  }  
  
  public Iterator<Frame> iterator(){
    return frames.iterator();
  }

  public int getScore() {
    return getLastFrame().getCumulativeScore();
  }

  public Frame getLastFrame() {
    return frames.get(frames.size() - 1);
  }
}

