#ifndef OBADH_H
#define OBADH_H
#include <stdint.h>
#include <stddef.h>
#ifdef __cplusplus
extern "C" {
#endif
#define OBADH_ABI_VERSION 1
typedef struct ObadhEngine ObadhEngine;
typedef struct ObadhAutocorrect ObadhAutocorrect;
typedef struct ObadhAutosuggest ObadhAutosuggest;
#define OBADH_COMMIT_ORDINARY 0u
#define OBADH_COMMIT_CORRECTION_REJECTED 1u
#define OBADH_COMMIT_MANUALLY_ADDED 2u
uint32_t obadh_abi_version(void);
size_t obadh_engine_version(uint8_t *out, size_t cap);
ObadhEngine *obadh_engine_new(void);
void obadh_engine_free(ObadhEngine *engine);
size_t obadh_transliterate(const ObadhEngine *engine,
const uint8_t *input, size_t input_len,
uint8_t *out, size_t cap);
size_t obadh_transliterate_lenient(const ObadhEngine *engine,
const uint8_t *input, size_t input_len,
uint8_t *out, size_t cap);
ObadhAutocorrect *obadh_autocorrect_open(const uint8_t *fst_path, size_t fst_path_len,
const uint8_t *loanword_path, size_t loanword_path_len);
void obadh_autocorrect_free(ObadhAutocorrect *autocorrect);
uint64_t obadh_autocorrect_fingerprint(const ObadhAutocorrect *autocorrect);
int32_t obadh_autocorrect_is_lexicon_word(const ObadhAutocorrect *autocorrect,
const uint8_t *word, size_t word_len);
size_t obadh_autocorrect_suggest(const ObadhAutocorrect *autocorrect,
const uint8_t *roman, size_t roman_len,
size_t limit, uint8_t *out, size_t cap);
int32_t obadh_autocorrect_should_replace(const ObadhAutocorrect *autocorrect,
const uint8_t *roman, size_t roman_len,
uint8_t *out, size_t cap, size_t *needed_len);
ObadhAutosuggest *obadh_autosuggest_open(const uint8_t *path, size_t path_len);
void obadh_autosuggest_free(ObadhAutosuggest *autosuggest);
uint64_t obadh_autosuggest_fingerprint(const ObadhAutosuggest *autosuggest);
int32_t obadh_autosuggest_commit(ObadhAutosuggest *autosuggest,
const uint8_t *token, size_t token_len, uint32_t strength);
uint32_t obadh_autosuggest_established_weight(const ObadhAutosuggest *autosuggest,
const uint8_t *word, size_t word_len);
int32_t obadh_autosuggest_is_word_established(const ObadhAutosuggest *autosuggest,
const uint8_t *word, size_t word_len,
uint32_t min_weight);
size_t obadh_autosuggest_suggest(ObadhAutosuggest *autosuggest, size_t limit,
uint8_t *out, size_t cap);
void obadh_autosuggest_clear_session(ObadhAutosuggest *autosuggest);
void obadh_autosuggest_clear_personal(ObadhAutosuggest *autosuggest);
size_t obadh_autosuggest_export_personal(const ObadhAutosuggest *autosuggest,
uint8_t *out, size_t cap);
int32_t obadh_autosuggest_import_personal(ObadhAutosuggest *autosuggest,
const uint8_t *input, size_t input_len);
#ifdef __cplusplus
}
#endif
#endif