This is a "dirty" GN solution, which - hopefully - some GN pro's will improve.
But i think it is a good starting point and maybe you can use already some ideas of this.
and by the way: my first community wiki answer - so i will not receive any reputation from this...and all other won't too. But i hope some guys will nevertheless have fun helping here ;)
feel free to download, change and upload better version of my "dirty" blend file