I am planning to visit Italy in December and I want to go from Rome (termini) to Florence by train. Should I book a train ticket from now or will there be available when I arrive at the termini station?
Yes, if you have certainty about your time of travel, then it is advisable to purchase tickets beforehand, not so much for risk of trains selling out, but more for significant savings.
With the exception of some three regional trains a day the line between Florence and Rome is served by high-speed trains "Frecciarossa" or "Frecciargento". Tickets for those are to be had at significant discounts when booked sufficiently in advance. Have a look to the trenitalia website as well as italo (competitor, less frequent trains but may be cheaper) for booking and also read what the man in Seat61 has to say.
That being said, unless traveling at peak times when seats will sell out, you could buy a ticket until right before departure (not sure whether even on the train, in case seek a conductor and explain). If you need flexibility you can also buy tickets with very lenient fare rules in advance, at the regular price.
Not if you take the regional/intercity train. In that case you can purchase your pass minutes before boarding but with no guarantee that you will find a free seat. They are the cheapest rails.
Regional journey takes double the time required for high speed rails (but those trains are still enforced severe speed limits for infrastructural reasons).
Reservation is instead required for high speed rails, can be purchased up to 3 minutes before scheduled departure. You won't get a pass at all if the train has no seat for you.