Groups vs Territories vs Roles

Groups vs Territories vs Roles

I'm trying to setup Zoho CRM to correctly represent my business. Here are more details:

- I have a consulting/brokerage firm that works with several unrelated companies ("principals")
- Each principal has multiple managers and salespeople
- The principals sell different products to different companies, but there are some overlaps (for instance two might be selling to Walmart, one company  apples and another cherries )
- Each company should have full visibility of "its" leads, accounts, contacts, emails, reports, dashboards... with the usual hierarchies (i.e. managers can view their salespeople's details, but different salespeople can't see each other's info)
- Different companies should NOT be able to see each other's info, in particular emails, events, opportunities, reports, dashboards... This is particularly important in the case of overlapping accounts. In the above example, both companies should see the Walmart account but perhaps have two different contacts, the "apple buyer" and the "cherry buyer" and not see the other buyer and all communications between the other company and him. Even in the case that two companies are selling to the same buyer ("fruit buyer") within the same account, each should only see its emails, events...
- I should be able to see all information for all accounts/contacts... and comments/edit/assign leads/opportunities, create dashboards, generate reports...

I'm new to Zoho and I'm in particular trying to understand how my setup should be represented and whether I should use groups, territories or roles.

Thank you!