Heat the vegetable oil in a large pan over medium heat. Add the chopped onion and cook until it becomes soft and translucent, about 5-7 minutes.
Add the minced garlic, ginger, and green chili (if using). Cook for another minute until fragrant.
Stir in the turmeric, cumin, coriander, cinnamon, black pepper, and cardamom. Cook for another minute to toast the spices.
Add the chopped tomato and cook until it breaks down and becomes a thick sauce, about 5 minutes.
Add the fish pieces to the pan and cook for about 3-4 minutes on each side, or until they are lightly browned.
Pour in the coconut milk and bring the mixture to a gentle simmer.
Reduce the heat to low, cover, and cook for about 15-20 minutes, or until the fish is cooked through and flakes easily with a fork.
Season with salt to taste.
Garnish with fresh cilantro before serving.
Enjoy your meal!