#ifndef OBADH_H
#define OBADH_H
#include <stdint.h>
#include <stddef.h>
#ifdef __cplusplus
extern "C" {
#endif
#define OBADH_ABI_VERSION 2
typedef struct ObadhEngine ObadhEngine;
typedef struct ObadhAutocorrect ObadhAutocorrect;
typedef struct ObadhAutosuggest ObadhAutosuggest;
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);
uint64_t obadh_autocorrect_word_frequency(const ObadhAutocorrect *autocorrect,
const uint8_t *word, size_t word_len);
size_t obadh_autocorrect_suggest_detailed(const ObadhAutocorrect *autocorrect,
const uint8_t *roman, size_t roman_len,
size_t limit, uint8_t *out, size_t cap);
size_t obadh_compose_suggestions(const ObadhAutocorrect *autocorrect,
const uint8_t *roman, size_t roman_len,
size_t limit, uint8_t *out, size_t cap);
size_t obadh_autocorrect_word_alternatives(const ObadhAutocorrect *autocorrect,
const uint8_t *word, size_t word_len,
size_t limit, uint8_t *out, size_t cap);
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);
size_t obadh_autosuggest_suggest(ObadhAutosuggest *autosuggest, size_t limit,
uint8_t *out, size_t cap);
size_t obadh_autosuggest_suggest_for_context(const ObadhAutosuggest *autosuggest,
const uint8_t *context, size_t context_len,
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