Factory generating various types of tokens


I am learning Solidity for a while now and I want to extend my knowledge how applications like CoinTool works. I've started a project which will be simple cointool clone but it would like to ask you what will be the best architectural solution for creating various types of tokens.

My first thought was to implement createToken() function with proper parameter of numeric value which will be linked to enum value like Burnable, BurnableMintable, MintablePausable etc and then based on some ifology proper token will be created. But I will also need like 10 more contracts for each type of variation.

My second though was to implement method which will create "full feature token" which will have all possible extensions and them implement functionality that will allow or disallow owner to burn/mint etc based on this functionality (some booleans describing contract possibilities).

What do you guys think?
First option seems to be messy and non ideal to create a lot of contracts and ifs, or maybe mapping - enum to specific contract type.
And the second option doesn't seem right to create god-like token which will be for example basic ERC20.
So are there any other solutions?

What is more I am wondering if is there a way to check token functionalities. For example how can I be sure that my newly created token has pausable functionality or burnable?

Thanks in advance