#pragma once

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

// required for ei.h to work
#ifndef _REENTRANT
#define _REENTRANT
#endif

#include <ei.h>
#include <ei_connect.h>

#include <unifex/unifex.h>
#include <unifex/cnode.h>
#include <unifex/payload.h>
#include "../../libesl_events.h"

#ifdef __cplusplus
extern "C" {
#endif

typedef State UnifexState;

UnifexState *unifex_alloc_state(UnifexEnv *env);
void unifex_release_state(UnifexEnv *env, UnifexState *state);
void handle_destroy_state(UnifexEnv *env, UnifexState *state);






UNIFEX_TERM connect_timeout(UnifexEnv * env, char * host, int port, char * user, char * password, int timeout);
UNIFEX_TERM events(UnifexEnv * env, char * values);
UNIFEX_TERM connect_timeout_result(UnifexEnv* env);
UNIFEX_TERM connect_timeout_result_error(UnifexEnv* env, char const  * atom);
UNIFEX_TERM events_result(UnifexEnv* env);
UNIFEX_TERM events_result_error(UnifexEnv* env, char const  * atom);
UNIFEX_TERM connect_timeout_caller(UnifexEnv *env, UnifexCNodeInBuff *in_buff);
UNIFEX_TERM events_caller(UnifexEnv *env, UnifexCNodeInBuff *in_buff);
int send_esl_event(UnifexEnv * env, UnifexPid pid, int flags, char const * data);
int handle_main(int argc, char** argv);

#ifdef __cplusplus
}
#endif
