#include "getopt.h"

#include <stdio.h>
#include <string.h>

#define  _getprogname() nargv[0]

int opterr = 1;
int optind = 1;
int optopt = 0;
char* optarg;

int getopt(int argc, char* const argv[], const char* ostr) {
    static const char kEmpty[] = "";
    static const char* place = kEmpty;
    if (!*place) {
        if (optind >= argc)
            return -1;

        const char* arg = argv[optind];
        if (arg[0] != '-') {
            // Not an option.
            return -1;
        }
        if (arg[1] == '-' && !arg[2]) {
            // '--' -> end of options.
            return -1;
        }
        if (!arg[1]) {
            // Single '-', If the program wants it, treat it as an option.
            // Otherwise, it's the end of options.
            if (!strchr(ostr, '-')) {
                return -1;
            }
            optopt = '-';
            place = arg + 1;
        } else {
            optopt = arg[1];
            place = arg + 2;
        }
    };

    char* oindex = strchr(ostr, optopt);
    if (!oindex) {
        // Unsupported option.
        (void)fprintf(stderr, "%s: illegal option -- %c\n", argv[0], optopt);
        return '?';
    }
    if (oindex[1] != ':') {
        // No argument needed.
        optarg = NULL;
        if (!*place)
            optind++;
        return optopt;
    }

    // This option needs an argument. Either after the option character,
    // or the argument that follows.
    if (*place) {
        optarg = (char *)place;
    } else if (argc > ++optind) {
        optarg = (char *)argv[optind];
    } else if (oindex[2] == ':') {
        // Optional argument is missing.
        place = kEmpty;
        optarg = NULL;
        return optopt;
    } else {
        // Missing argument.
        place = kEmpty;
        (void)fprintf(stderr, "%s: option requires an argument --%c\n",
                      argv[0], optopt);
        return ':';
    }
    return optopt;
}
