/**
 * Kifu クラスは、対局情報と手順を管理します。
 * @author Jiro Suzuki
 */
public class Kifu{

    private GameInformation gameInfo;
    private OrderOfMoves order;

    /**
     * 対局情報と手順が空のインスタンスを生成します。
     */
    public Kifu(){ 
        gameInfo=new GameInformation();
        order=new OrderOfMoves();
    }

    /**
     * 指定された手順を設定します。
     * @param order 手順(着手情報の配列)
     */
    public void setOrderOfMoves(OrderOfMoves order){
        this.order=order;
    }    

    /**
     * 手順を取得します。
     * @return 手順
     */
    public OrderOfMoves getOrderOfMoves(){
        return order;
    }    

    /**
     * 対局情報を設定します。
     * @param gameInfo 対局情報
     */
    public void setGameInformation(GameInformation gameInfo){
        this.gameInfo=gameInfo;
    }

    /**
     * 対局情報を取得します。
     * @return 対局情報
     */
    public GameInformation getGameInformation(){
        return gameInfo;
    }    

    /**
     * 検討用の棋譜のコピーを作成します。
     * @param numOfMoves 作成するコピーの手数
     * @return 指定された手数までの棋譜情報
     */
    public Kifu createExamClone(int numOfMoves){
        Kifu kifu=new Kifu();
        OrderOfMoves orderCopy=new OrderOfMoves();
            for(int i=0;i<=numOfMoves;i++){
                Move move=order.getMove(i);
                int stoneColor=move.getStoneColor();
                int row=move.getRow();
                int col=move.getCol();
                Move moveCopy=new Move();
                moveCopy.setMove(stoneColor,row,col);
                orderCopy.add(moveCopy);
            }
        kifu.setOrderOfMoves(orderCopy);
        kifu.setGameInformation(gameInfo);
        return kifu;
    }

    /**
     * 着点の情報を一手追加します。
     * @param move 着点の情報
     */
    public void addMove(Move move){
        order.add(move);
    }    
}