Cut 2 of the onions in half, then into thin slices. Pour the oil into a large frying pan and heat over a medium temperature. When hot, add the sliced onions let them sizzle for 1-2 minutes.
Turn the temperature down to medium low. Sizzle gently stirring occasionally for 4-5 minutes until they turn light brown. Turn the temperature down to low and let the onions sizzle for another 10-12 minutes. They'll turn an orange/brown colour and slightly crispen. Be careful not to let them burn as this will add a bitter taste to your sauce.
Drain the onions (making sure to keep the oil!). Spread out the crispy onions on waiting paper towels. and pat off any excess oil. Leave to cool.
Chop the remaining onions and add them to a food processor with the garlic and ginger with 4 tablespoons of water and puree into a paste. Pour into a bowl and set aside.
Chop the spinach into large pieces and arrange in a medium pan. Cover with 100ml water and bring to a boil. Cover and cook for 2-3 minutes until wilted. Drain and cool slightly then roll into a ball in a clean tea towel and squeeze out some of the water. Add the spinach to the food processor and blend into a rough paste. Set aside.
In a large pan, heat 4 tablespoons of the reserved onion oil over a moderate heat. Add the cardamom and cinnamon and fry briefly. Next, add the onion paste and fry for 4-5 minutes until golden brown. Add the cumin, coriander and cayenne pepper and fry for 1 minute.
Tip in the chicken and tomatoes and fry for 4 minutes. As you do this, gradually add the yoghurt tablespoon by tablespoon. Stir in the spinach and 1 teaspoon salt - cook for 2-3 minutes then crumble over the crispy onions and add 300ml hot water.
Bring to a boil, then reduce the heat to medium/low and gently simmer, partially covered, for 30 minutes.
I love to eat this with Indian Breads, but it's also pretty special with some fluffy basmati rice. You can also drizzle over a little double cream at the end, just to create a super rich and decadent texture.