package game;
final class GameEnd {
private final String gameId;
private final String result;
private final String winnerId;
private GameEnd(final String gameId, final String result, final String winnerId) {
this.gameId = gameId;
this.result = result;
this.winnerId = winnerId;
}
public final String getGameId() {
return gameId;
}
public String getResult() {
return result;
}
public String getWinnerId() {
return winnerId;
}
public static GameEnd win(final String gameId, final String winnerId) {
return new GameEnd(gameId, "win", winnerId);
}
public static GameEnd draw(final String gameId) {
return new GameEnd(gameId, "draw", null);
}
@Override
public boolean equals(final Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
final GameEnd gameEnd = (GameEnd) o;
if (!gameId.equals(gameEnd.gameId)) return false;
if (!result.equals(gameEnd.result)) return false;
if (winnerId != null ? !winnerId.equals(gameEnd.winnerId) : gameEnd.winnerId != null) return false;
return true;
}
@Override
public int hashCode() {
int result1 = gameId.hashCode();
result1 = 31 * result1 + result.hashCode();
result1 = 31 * result1 + (winnerId != null ? winnerId.hashCode() : 0);
return result1;
}
@Override public String toString() {
return result.equals("win")
? String.format("Win (game: %s, player: %s)", gameId, winnerId)
: String.format("Draw (game: %s", gameId);
}
}