After days for searching, trying new solution and new code asking on SO, I decided to start fresh 🙁
It is hard since I have been working on this project for weeks. But nothing I can do. Maybe, a fresh start is a good way to inspect code again and think of new way to design and implement features.