Did you already tried something ? Or do you want us to give you a working solution that meets all your requirements ?
I would start by making a diagram with all the tables/enums. Once you have a basic layout of the database, check if you can normalize it. Once that is all done, you can start...