One method, many reasons to change
Everything crammed into one place. Adding a payment method or a discount rule means re-opening this method and risking the existing branches. This is what you're about to refactor away.
// ❌ BAD — every new rule = an edit to this same method
public void ProcessPayment(Order order, string method)
{
decimal total = order.Price * order.Quantity;
// discount rules
if (order.CustomerType == "vip") total -= total * 0.20m;
else if (order.CustomerType == "reg") total -= total * 0.10m;
if (total > 1000m) total -= 50m;
// tomorrow: black friday? edit here.
// next week: loyalty points? edit here.
// payment rules
if (method == "card")
Console.WriteLine($"Card payment of {total:C}");
else if (method == "cash")
Console.WriteLine($"Cash payment of {total:C}");
// tomorrow: paypal? crypto? applepay? edit here too.
else
throw new ArgumentException("Unknown method");
}