Selecting alternate output to display?

Hi guys. I'm new to Arduino and programming it so please bear with me. I've got a project that uses an Arduino Nano, a seven segment display, a GPS unit and a button. At the moment I have the button cycle between displaying heading, MPH, KMPH and time. So each time the button is pressed it cycles 1, 2, 3, 4, 1 etc.

I've looked at a few long press button code but don't know how to implement them within my code. What I would like to achieve are:-

Make the MPH and KMPH selectable so that once one is chosen, the cycle is just 1, 2, 3, 1 etc.

Make the display brightness selectable in 3 modes, bright, normal and dim, probably while the time is being displayed.

Store the values so that they're retained the next time the arduino is switched on.

I'm not sure what of the above is achievable but would appreciate any input and advice. The code is below and whilst I'm sure it's very basic to most, its taken me a long tome to get it to where it is now. If there are improvements that can be made then I'd happily take the tips!

I would add a second button.
If the current mode is SPEED the second button switches between MPH and KPH.
If the current mode is CLOCK the second button cycles through the brightness settings.
Store the SPEED and BRIGHTNESS settings in EEPROM so they can be read in setup().

If you can figure out how to implement one of the long-press examples you can use that in place of a second button.

Thank you. I think a second button is a better solution than trying to do it all with one button and I think I can work out how to add that.

Taking it one step at a time, I guess I'm creating some sort of subroutine within SPEED to select mph or kmph?