Aw hun, yes your not alone we all have them!!!
I think with people like this they are very unhappy people in themselves and they wont just be like this to you, they'll be like this to everyone in their lives. Some people get enjoyment or a sense of power if they know they can knock your confidence or put you in a bad mood, it's ridiculous but in my opinion it's normally because they are so unhappy in themselves.
My advice is-please don't take it personally!!! I know myself i need to take my own advice as every-time something goes wrong for me I do take it personally every time but I know i need to try not to. All it will do is break your confidence and you don't want that. If she was that 'unhappy' why has she been loyal to you for 3 years!!! That speaks volumes in itself.
If you wish to keep her as your client I'd say take it on the chin, ignore her comments and just keep quiet or you could say in a very professional but straight way, I'm sorry you feel that way but I do try my best and if your not happy I suggest you see another stylist?
I've done both the above and it's been good for me. More recently I had a client who whenever I did her hair she'd text me 2 weeks later, or call me up complaining about something ridiculous, it knocked me and i went back to correct the problems but soon realised this was just a way of getting a free haircut/colour touch up in between, so when she text me for a colour and cut last time, as much as i need the money I figured the stress and constant confidence knocking wasn't actually worth it! So I was a coward in the way i done it but i just replied saying i was really busy for the next month etc and so far i haven't heard from her.
Sometimes you got to ask yourself is it worth the stress and bother.
Personally I'm finding clients more and more work these days, they expect miracles for peanuts and quite a lot of them now do treat us a little crappy.
Keep your head up hun, there not worth wasting any time stressing over. As long as you do your best what more can you do?
Stay positive
:hug: