Molecular docking in organic, inorganic, and hybrid systems: a tutorial review