Marinate the Chicken: In a large bowl, combine yogurt, ginger-garlic paste, turmeric powder, chili powder, cumin powder, garam masala, and salt. Add the chicken pieces and coat well. Cover and refrigerate for at least 1 hour (or overnight for best results).
Cook the Rice: In a large pot, bring 4 cups of water or chicken stock to a boil. Add the soaked and drained basmati rice, a pinch of salt, and whole spices (cloves, cardamom, cinnamon, bay leaves). Cook the rice until it’s 70% done (still a bit firm). Drain the rice and set aside.
Cook the Chicken: In a large skillet or heavy-bottomed pot, heat 2 tablespoons of ghee or oil. Add cumin seeds and sauté for a minute. Add sliced onions and fry until golden brown. Add chopped tomatoes and green chilies, cooking until softened. Stir in the marinated chicken and cook on medium heat until the chicken is fully cooked and the oil separates.
Layer the Biryani: In a large pot or Dutch oven, layer half of the par-cooked rice on the bottom. Add the cooked chicken and its sauce on top of the rice, spreading it out evenly. Layer the remaining rice on top. Drizzle with saffron milk (if using) and sprinkle with fresh coriander and mint leaves.
Dum Cooking: Cover the pot with a tight-fitting lid or seal it with foil. Cook on very low heat for 20-25 minutes to allow the flavors to meld together (this process is called "dum cooking").
Serve: Fluff the biryani with a fork and serve hot with raita (yogurt sauce) or a side salad.