You need to add this line at top of your function:
OPTIND=1
Otherwise successive invocation of the function in shell are not resetting this back since function is being run in the same shell every time.
As per help getopts
:
Each time it is invoked,
getopts
will place the next option in the
shell variable$name
, initializing name if it does not exist, and
the index of the next argument to be processed into the shell
variableOPTIND
.OPTIND
is initialized to1
each time the shell or
a shell script is invoked.