Each queue having its own waiting music, no problem.
I know the queue as agents being logged in a queue, when a call comes into that queue the call is transferred to the first available agent. But you want agents to pick the queue…
Think that can be done, just create an extension the agent can dial for every queue, that extension logs the agent into the queue, then the agent will be available, the call from the queue will be transferred to the agent. In this case make sure the agent will be logged out of the queue when the call is finished otherwise the next call of that queue will also be transferred to the agent that is logged in.
And the overview of how many calls are in which queue is easy, there are several tools for that, or you could write something yourself.
A client that supports multiple lines, yes there are… have not seen them for 20 to 30 lines though… why would you want that. Do you want calls to be on hold? In my experience multiple lines for an agent is not handy… you need multiple channels, to be able to transfer calls… but not multiple lines… but I could be wrong.
Hope this helps.