Preheat the oven to 200C fan. Combine the red onion, lemon juice and 1/8 tsp salt in a small bowl and set aside while you make the 'meatballs' and sauce, or leave overnight.
Put the cashews and almonds into a small saucepan on a medium-high heat. Cover with water, bring to the boil, then lower the heat to medium and simmer for 20 minutes. Drain and set aside.
For the 'meatballs', heat the oil in a large saute pan on a high heat, then add the mushrooms and the firm tofu and cook until lightly golden, about 8 minutes. Stir in the garlic for 30 seconds, then remove from the heat. Place in a food processor and pulse until roughly chopped. Transfer to a large mixing bowl with all the remaining ingredients for the meatballs, ½ tsp salt and a good grind of black pepper. Mix very well to combine. With oiled hands, form into 16 ping-pong-sized balls, about 40 gm each, compressing them as you go so they hold together. Place them on a paper-lined baking tray, spaced apart, and bake for 25 minutes until lightly golden. Set aside.
While the meatballs are in the oven, make the sauce. Finely crush the cardamom, cumin and coriander seeds in a pestle and mortar and set aside. Put 1 ½ tbsps oil into a large saute pan, for which you have a lid, on a medium-high heat. Add the onion and cook for 10 minutes, or until softened and deeply browned. Transfer to a blender along with the nuts and 200ml of water, and blend until completely smooth, about 2 minutes.
Put the remaining 1 ½ tbsps of oil into the same pan on a medium-high heat. Add the garlic, ginger and green chilli and cook for 1 minute, then add the spices and cook for 1 minute more. Add the tomatoes and cook for 4 minutes, stirring occasionally until thickened. Add the pureed onion and nut mixture, another 500 ml water, ½ tsp salt and a good grind of black pepper. Bring to a simmer, then lower the heat to medium and cook for 25 minutes, until reduced by a third. Add the meatballs to the pan of sauce, then cover with the lid and heat for 5 minutes, until the meatballs are warmed through. Sprinkle over the coriander and sliced red onion.