#ifndef LANDERCTL
#define LANDERCTL

#include <stdbool.h>

#include <curl/curl.h>

typedef struct landerctl_cfg {
  const char *api_key;
  const char *server_url;
} landerctl_cfg;

typedef enum landerctl_cfg_err {
  landerctl_cfg_err_ok = 0,
  landerctl_cfg_err_not_found,
  landerctl_cfg_err_invalid,
  landerctl_cfg_err_incomplete,
} landerctl_cfg_err;

/**
 * Try to parse the required config arguments from the config file
 *
 * @param out config to write values to. Existing values are overwritten
 * @param path path to config file
 */
landerctl_cfg_err landerctl_cfg_parse(landerctl_cfg *out, const char *path);

typedef enum landerctl_mode {
  landerctl_mode_none = 0,
  landerctl_mode_short,
  landerctl_mode_paste,
  landerctl_mode_file,
} landerctl_mode;

typedef enum landerctl_err {
  landerctl_err_ok = 0,
  landerctl_err_not_found
} landerctl_err;

typedef struct landerctl_ctx {
  landerctl_cfg cfg;
  landerctl_mode mode;
  bool secure;
  bool verbose;
  const char *arg;
  const char *key;
  CURL *curl;
  struct curl_slist *headers;
  FILE *data_file;
} landerctl_ctx;

const char *landerctl_err_msg(landerctl_err err);

void landerctl_set_common(landerctl_ctx *ctx);
landerctl_err landerctl_post_short(landerctl_ctx *ctx);
landerctl_err landerctl_post_paste(landerctl_ctx *ctx);
landerctl_err landerctl_post_file(landerctl_ctx *ctx);

#endif