#ifndef ARGPARSER_H
#define ARGPARSER_H

#include "aliases.h"

typedef struct argparser argparser_t;

typedef enum {
  ARG_TYPE_POSITIONAL,
  ARG_TYPE_NAMED,
  ARG_TYPE_FLAG,

  COUNT_ARG_TYPE,
} arg_type_t;

typedef struct {
  arg_type_t type;
  const char *short_name;
  const char *long_name;
} arg_t;

typedef void (*parse_func_t)(arg_t arg, void *user_data);

argparser_t *create_parser(parse_func_t parse_func);
void destroy_parser(argparser_t **parser);
void add_argument(argparser_t *parser, arg_t arg);
void parse_args(argparser_t *parser, i32 argc, char *argv[]);

#endif // !ARGPARSER_H