Start by marinating your chicken pieces with yogurt, garlic, ginger, cumin, chili powder, turmeric, garam masala, and salt. Mix everything together in a large bowl until all the chicken pieces are fully coated. Cover and refrigerate for at least one hour, or up to overnight for better results.
Heat oil or ghee in a large pot over medium-high heat. Add the garlic, ginger, and onions and cook until softened (about 5 minutes). Add the chopped tomatoes and season with salt to taste. Cook until the tomatoes are tender (about 8 minutes).
Add the tomato puree and mix well. Add the coriander powder, turmeric, chili powder, cardamom powder, garam masala, cashew paste, and fenugreek leaves. Stir everything together and cook for about 10 minutes, or until the sauce is thickened.
Add the chicken pieces to the sauce and mix well. Cover and cook over medium-low heat for about 25 minutes, stirring occasionally.
Once the chicken is cooked through, add the butter and cream. Stir everything together, cover, and let simmer for another 5 minutes.
Serve hot with basmati rice or naan bread.