#ifndef _SRCAPI_H_
#define _SRCAPI_H_

#ifdef __cplusplus
extern "C" {
#endif


typedef struct _SRCParam
{
	const char* URL;
	const char* appKey;
	const char* appSecret;
	const char* cuid;
	const char* severVadThresh1;
	const char* severVadThresh2;
	const char* timeOutResponseInMsec;
	const char* timeOutSpeechInMsec;
	const char* speakerId;
	const char* userId;
	const char* useClientVad;
} SRCParam;

enum SRC_ERROR
{
	SRC_SUCCESS = 0,
	SRC_HTTP_ERROR = 1,
	SRC_SERVER_ERROR = 2,
	SRC_SESSION_BEGIN_ERROR = 3,
};

enum VAD_STATUS
{
	SRC_VAD_LOOKING_FOR_SPEECH = 0,
	SRC_VAD_IN_SPEECH = 1,
	SRC_VAD_END_SPEECH = 2,
	SRC_VAD_TIMEOUT_RESPONSE = 3,
	SRC_VAD_TIMEOUT_SPEECH = 4,
};

enum	 REC_STATUS
{
	SRC_REC_SENT_AUDIO_SUCCESS          = 1000,
	SRC_REC_SENT_AUDIO_FAILED           = 1001,
	SRC_REC_SENT_AUDIO_END_DETECTED      = 1002,
	SRC_REC_SILENCE_TIME_OUT            = 1010,
	SRC_REC_SPEECH_TIME_OUT             = 1011,
	SRC_REC_RESULT_COMPLETE             = 2000,
	SRC_REC_TIMEOUT_SERVICE_CLOSING      = 2001,
	SRC_REC_TIMEOUT_SERVICE_CLOSED       = 2002,
	SRC_REC_RESULT_NOT_COMPLETE          = 2003,
	SRC_REC_NLU_SUCCESS                 = 3100,
	SRC_REC_NLU_FAILED                  = 3101,
	SRC_REC_RESULT_PARAM_NULL            = 4001,
	SRC_REC_MISS_AUTHEN_PARAM            = 4002,
	SRC_REC_AUTHEN_FAILURE               = 4003,
	SRC_REC_MISS_IDX_OR_ILLEGAL          = 4004,
	SRC_REC_MISS_CUID                   = 4005,
	SRC_REC_MISS_CHANNEL                 = 4006,
	SRC_REC_MISS_PTC_OR_ILLEGAL           = 4007,
	SRC_REC_MISS_RATE_OR_ILLEGAL          = 4008,
	SRC_REC_MISS_SESSIONID               = 4009,
};

typedef void(*LogCallBackFunc)(int logLevel, const char* log, void *userData);

void SRCSetUPParam(const char* strKey, const char* strValue);

void SRCSetSPParam(const char* strKey, const char* strValue);

const char* SRCSessionBegin(SRCParam srcParam, int *error, LogCallBackFunc func, void *userData);

int SRCAudioWrite(const char* session_id, const short *audioData, unsigned int audioLen, int *vadStat, int *recStat);

const char* SRCGetResult(const char* session_id, int *server_ret);
	
int SRCSessionEnd(const char* session_id);
	
const char* SRCGetVersion();


#ifdef __cplusplus
};
#endif

#endif // _SRCAPI_H_
