Yes you are right to leave him.
No you don't deserve to be treated like **** because you called him an idiot. My fiance and I call each other idiots all the time - doesn't mean we will start nose bleeding on each other in anger.
He's clearly got some issues he needs to process - but not with you.
And the final thing, maybe hold off on the expensive purchases? Unless money is no object, don't spend crazy money on men when being cheap and happy is far better