Note: This recipe uses two large pots to speed up the process. If you don't have two large pots, cook the rice first, then the onions and chicken.
Marinate Chicken: Mix the Marinade ingredients (except for the chicken) in a large bowl. Add the chicken and turn it to coat. Marinate in the refrigerator for 2-24 hours. Bring to room temperature for 30 minutes before cooking.
Rinse Rice: Rinse the rice until the water mostly runs clear, then soak it in a bowl of water for 30 minutes. Drain after 30 minutes in a fine mesh sieve. Meanwhile, make the onions. You can boil the water for the rice while the onions are finishing.
Crispy Onions: While the rice is soaking, heat a large Dutch oven over medium heat with the oil and ghee. Add the onions and shallow fry, stirring often so they cook evenly, until golden brown and beginning to crisp up, about 20 minutes. Take care not to overcook; they can quickly become burnt and bitter, especially towards the end. Transfer to paper towels to drain, but don’t wipe out the pan; set aside. The oil will be used for the chicken.
Toast Spices: Heat a separate large stock pot or Dutch oven over medium-high heat (whatever pot you’re going to cook the rice in). Add the whole spices except for the bay leaves (cloves, star anise, cardamom pods, cumin seeds, cinnamon sticks) and toast for 1-2 minutes, until fragrant.
Par-Boil Rice: Add about 7 cups of water to the toasted spices. Bring to a roaring boil, then add the salt and bay leaves. Add the drained rice and return to a roaring boil. Once it comes to a boil again, boil for 3-4 minutes (NO MORE) until the rice is partially cooked and still firm in the middle – it shouldn’t get mushy when pressed. Drain immediately, leaving the spices in the rice. Add freshly cracked salt and pepper to taste when cool enough, then set aside.
Saffron: When you're ready to cook the chicken, add the saffron strands to the warm milk to soak for about 10 minutes.
Chicken: Drain all but 2 tablespoons of oil/ghee from the onion pot and heat over medium-high heat. Add the chicken and its marinade. Cook on medium heat for 8 to 10 minutes, turning halfway through (the chicken does not need to be cooked through).
Layer: Remove the chicken from the heat. Scatter half of the onions over the chicken, followed by the cilantro, mint, and rice. Drizzle the saffron milk and melted ghee evenly over the rice.
Cook: Check the rice for doneness so you know how long it needs to steam (it may have cooked more while resting). Cover and cook on low for 15-20 minutes, until the rice is cooked but not mushy. Remove from the heat and rest (lid on) for 10 minutes.
Garnish: Garnish with the remaining onions and desired cilantro and mint. Serve hot, using a large spoon to scoop up the layers in one spoonful.