Totally unreasonable behaviour on his part. If its been going on for sometime he's not going to change
There may be good times, but think about them, are they tinged with unpleasantness at all.
I'd not want to have anything more to do with him.
You might find it useful to write down maybe in emails to yourself, or just keep emailing the document to yourself, all the things that have upset you with him over the years. If he goes through a nice phase trying to win you back, read it and think do I want to suffer this behaviour when the effort of being nice has worn off. You might find looking back, that as well as big things there were little things too, and that even during nice times there were things that weren't good. I did the freedom programme several times and each time I remembered new things that had affected my life adversely, even nowadays I sometimes have insights about his behaviour that I'd put down just to him being nasty but actually were abusive, and just because I told him that he was being unreasonable and did whatever anyway, it did affect me and make me unhappy and made me wonder was I being unreasonable. Which I absolutely know now I wasn't being. There is a world out there in which you can do what makes you happy. You can look in your diary and make your own decisions, tell friends that no you can't do something because you have something on, or even if you don't have anything else on if its your only free evening, you can change your mind if you choose to if you are feeling tired and reschedule. Real friends don't try and force you to do things if you can't. Of course sometimes you will have something booked with a friend, and it will be worth pushing yourself. Am not saying be selfish, be a good friend, just don't accept being with someone who only cares about themself and doesn't find something that doesn't make you unhappy but that's ok because he is happy you could make a list of what you get out of the relationship if you want to be balanced, is there anything in there you couldn't get elsewhere, and compare the 2 lists