class Majority extends Prisoner {

    private String tieMove;
    private int numOfOpponentsCooperateMoves;
    private int numOfOpponentsDefectMoves;
    
    public Majority(String tieMove) {
        super(tieMove.equals("COOPERATE") ? "soft_majo" : "hard_majo");
        this.tieMove = tieMove;
    }

    public String move() {
        // Copy the opponent's majority move.
        // If the opponent has the same number of COOPERATE and DEFECT moves, then use the tie move.
        if (numOfOpponentsCooperateMoves == numOfOpponentsDefectMoves) {
            return tieMove;
        }
        if (numOfOpponentsCooperateMoves > numOfOpponentsDefectMoves) {
            return "COOPERATE";
        }
        return "DEFECT";
    }

    public void memoriseHistory(String opponentsMove) {
        if (opponentsMove.equals("COOPERATE")) {
            numOfOpponentsCooperateMoves = numOfOpponentsCooperateMoves + 1;
        } else { // opponent defected
            numOfOpponentsDefectMoves = numOfOpponentsDefectMoves + 1;
        }
    }

    public void forgetHistory() {
        numOfOpponentsCooperateMoves = 0;
        numOfOpponentsDefectMoves = 0;
    }
    
}
