I have seen this counting above somewhere maybe we can move this into the enum and return a `struct` like class?