public boolean canCastle(Castle castle) {
        if(!castle.isValid(this)) {
            return false;
        }

        Move kingMove = castle.getKingMove();
        Move rookMove = castle.getRookMove();
        if(get(kingMove.getFrom()).hasMoved() || get(rookMove.getFrom()).hasMoved()) {
            return false;
        }

        if(!isEmpty(kingMove.getTo()) || !isEmpty(rookMove.getTo())) {
            return false;
        }

        if(kingMove.getDirection() == Direction.KingCastleLeft && !isEmpty(new Position(kingMove.getFrom(), Direction.Left))) {
            return false;
        }

        // TODO Check if king.getTo or rook.getTo is menaced
        return true;
    }