package net.woodyfolsom.msproj;


public class GameScore {
	public static final int NORMALIZED_ZERO_SCORE = 379;
	
	private double komi;
	private int blackScore;
	private int whiteScore;
	
	public GameScore(int blackScore, int whiteScore, double komi) {
		this.blackScore = blackScore;
		this.komi = komi;
		this.whiteScore = whiteScore;
	}

	public double getBlackScore() {
		return (double)blackScore - komi;
	}

	/**
	 * Gets a representation for the game score as an integer.  Lower numbers are better for white.
	 * The minimum value is 0 (Chinese scoring - white owns every intersection on 19x19 and has 9 stone komi).
	 * Likewise, the maximum value if 379x2 (black owns every intersection with zero komi).
	 * @return
	 */
	public int getAggregateScore() {
		return NORMALIZED_ZERO_SCORE + 2 * blackScore - ((int)(2 * (whiteScore + komi))); 
	}
	
	public double getScore(String color) {
		if ("w".equals(color)) {
			return getWhiteScore();
		} else if ("b".equals(color)) {
			return getBlackScore();
		} else {
			return 0.0;
		}
	}
	
	public double getWhiteScore() {
		return (double)whiteScore + komi;
	}

	public String toString() {
		return "B: " + blackScore + "W: "+ whiteScore+"K:" + komi;
	}
	
	public String getScoreReport() {
		double blackScore = getBlackScore();
		double whiteScore = getWhiteScore();
		
		boolean gameTied = Math.abs(blackScore - whiteScore) < 0.5;
		
		if (gameTied) {
			return "Black +0 (tie)";
		} else if (blackScore > whiteScore) {
			return "Black +"
					+ (blackScore - whiteScore - komi);
		} else {
			return "White +"
					+ (whiteScore + komi - blackScore);
		}
	}
}