Puerto Iguazu is a small town on the Argentina side of the border. There are lots of hotels here within walking distance of the bus station, I didn’t book anything, I just walked and found one. The hotels are very cheap here. It is from the bus station that you also need to take a bus out to the waterfalls.
I bought my bus ticket to Rio at the Puerto Iguazu bus station, I thought I was buying a direct bus ticket but actually I got a private taxi to take me through the border and to the Foz do Iguazu bus station in Brazil. This turned out to be very easy as the taxi driver took my passport for stamping out of Argentina and into Brazil whilst I waited in the taxi, then he took me onto Foz. The bus I took was Kaiowa, which cost 207 Brazilian reais. As I bought the ticket in Argentina, it meant I paid in pesos which I bought on the black market, this meant the ticket was significantly cheaper.
You need to take anti malaria medicine whilst traveling through Brazil, also you need a yellow fever vaccination. You can get yellow fever vaccinations free in Brazil, it’s something to consider if it’s expensive in your home country.
The overnight bus was comfortable, it took 25 hours to reach Rio. There were no free meals on this bus but there were plenty of stops at clean places with good food.