package com.hearthsim.results;
import com.hearthsim.model.BoardModel;
import com.hearthsim.model.PlayerSide;
import com.hearthsim.util.HearthActionBoardPair;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
import java.util.TreeMap;
public class GameDetailedRecord implements GameRecord {
private final ArrayList<TreeMap<Integer, BoardModel>> boards_;
public GameDetailedRecord() {
boards_ = new ArrayList<>(2);
boards_.add(new TreeMap<>());
boards_.add(new TreeMap<>());
}
@Override
public void put(int turn, PlayerSide activePlayerSide, BoardModel board, List<HearthActionBoardPair> plays) {
int index = GameDetailedRecord.getIndexOfPlayer(activePlayerSide);
boards_.get(index).put(turn, board);
}
@Override
public int getRecordLength(int playerId) {
return boards_.get(playerId).size();
}
@Deprecated
@Override
public int getNumMinions(int playerId, int turn, int currentPlayerId) {
BoardModel boardModel = boards_.get(currentPlayerId).get(turn);
PlayerSide playerByIndex = GameDetailedRecord.getPlayerByIndex(playerId);
PlayerSide otherPlayer = playerByIndex.getOtherPlayer();
return boardModel.modelForSide(otherPlayer).getNumMinions();
}
@Override
public int getNumCardsInHand(int playerId, int turn, int currentPlayerId) {
BoardModel boardModel = boards_.get(currentPlayerId).get(turn);
PlayerSide playerByIndex = GameDetailedRecord.getPlayerByIndex(playerId);
PlayerSide otherPlayer = playerByIndex.getOtherPlayer();
return boardModel.getNumCards_hand(otherPlayer);
}
@Override
public int getHeroHealth(int playerId, int turn, int currentPlayerId) {
BoardModel boardModel = boards_.get(currentPlayerId).get(turn);
PlayerSide playerByIndex = GameDetailedRecord.getPlayerByIndex(playerId);
PlayerSide otherPlayer = playerByIndex.getOtherPlayer();
return boardModel.modelForSide(otherPlayer).getHero().getHealth();
}
@Override
public int getHeroArmor(int playerId, int turn, int currentPlayerId) {
BoardModel boardModel = boards_.get(currentPlayerId).get(turn);
PlayerSide playerByIndex = GameDetailedRecord.getPlayerByIndex(playerId);
PlayerSide otherPlayer = playerByIndex.getOtherPlayer();
return boardModel.modelForSide(otherPlayer).getHero().getArmor();
}
@Override
public JSONObject toJSON() {
return new JSONObject();
}
public BoardModel get(int turn, int playerID) {
return boards_.get(playerID).get(turn);
}
// TODO: remove asap, simply to aid in refactoring
private static int getIndexOfPlayer(PlayerSide playerSide) {
if (playerSide == PlayerSide.CURRENT_PLAYER){
return 0;
} else {
return 1;
}
}
// TODO: remove asap, simply to aid in refactoring
private static PlayerSide getPlayerByIndex(int index) {
if (index == 0){
return PlayerSide.CURRENT_PLAYER;
} else {
return PlayerSide.WAITING_PLAYER;
}
}
}