This will be a little fiddly as your requirements conflict with how discounts are "normally" applied (at least in my experience). Oscar's offers aren't really designed to be used cumulatively - if a product has been discounted by one offer, it is normally unavailable for further discounts.
It also sounds unusual to not apply the discount to individual products. What if a product is returned for refund? It might be tricky to work out how much to refund.
to apply your custom discount to the basket once the payment method is known. I'm not 100% sure on the best way of applying a discount at this stage - you might be able to add a new result instance to basket.offer_applications.
Good luck.