How to display message (NDA, warning, etc.) before content can be viewed?
You've listed a nebulous group of requirements that somewhat overlap with existing module projects out there. FWIW, there's also the Premium Content module which also has elements of what you're asking for. 

My guess is you're not going find one that 100% matches your current and ongoing needs. So you either find one that matches the most &amp; work on patches to that project, or you build your own. Depending on how specific your needs are one might work better than another.

If you go the "build my own" path, look at hook_node_access() &amp; hook_node_view() (D8: hook_entity_view()) which respectively allow you step in front of node permission checks and rendering. They will be the core of your strategy to determine when to allow full access &amp; when to send your user through a NDA confirmation workflow.