Honestly, the countertop CC terminals and most POs systems will handle the cash discounting for you. Assuming your ISO allows it, they will reconfigure your terminal and change you to daily discount (collect the discount fees daily after settlement).
BUT, yes there are some states which do not allow it. So it just depends on your state, but most do you allow it.
In terms of being a complaint, there are a few steps, which I will borrow from another site.
The essential steps being 1) Correct signage must be posted at the door and check out 2) The amount of the added service fee must be clearly displayed on the receipt and 3) Offering your customers a cash discount verbally. Even though gas stations post different prices, as a retailer it is not necessary to do so. The posted prices are considered cash prices and the signage allows for a fee if the payment is not made with cash. In order to be compliant, merchants with a Cash Discount Program need to display the Base Amount of the transaction, the Cash Discount, and the Total Cost of the transaction on the customers’ receipt.
ALSO if you accept pin-based debit, you can't apply a Cash Discount fee to that, and must treat it as a cash payment. also note surcharging is prohibited in California, Colorado, Connecticut, Florida, Kansas, Maine, Massachusetts, New York, Oklahoma, and Texas, and cash discounting is deemed a surcharge in those states.
Finally, you also need to notify Visa/mastercard of your intent to surcharge, otherwise it is a contract breach.
https://usa.visa.com/Forms/merchant-surcharge-notification-form.html
https://www.mastercard.us/en-us/surcharge-disclosure-webform.html