/**
 * @file function_call_handler.h
 * @brief FC（Function Call）分发与处理
 */

#ifndef CORE_FUNCTION_CALL_HANDLER_H
#define CORE_FUNCTION_CALL_HANDLER_H

#include <stdint.h>
#include <stddef.h>

#ifdef __cplusplus
extern "C" {
#endif

typedef struct engine_internal_ctx engine_internal_ctx_t;
typedef struct fc_handler_ctx      fc_handler_ctx_t;

/**
 * @brief FC 处理回调
 * @param name      函数名
 * @param params    参数 JSON 字符串
 * @param result    输出结果缓冲区
 * @param result_sz 结果缓冲区大小
 * @param user_ctx  用户上下文
 * @return 0 成功，负值失败
 */
typedef int (*fc_callback_t)(const char *name,
                             const char *params,
                             char *result,
                             size_t result_sz,
                             void *user_ctx);

/** @brief 初始化 FC 处理器 */
int fc_handler_init(engine_internal_ctx_t *ctx);

/**
 * @brief 处理收到的 FC 消息
 * @param json_str FC JSON 字符串
 * @param len      字符串长度
 */
int fc_handler_process(engine_internal_ctx_t *ctx, const char *json_str, size_t len);

/**
 * @brief 注册自定义 FC 处理函数
 * @param name     函数名（需保持有效）
 * @param callback 处理回调
 * @param user_ctx 用户上下文
 */
int fc_handler_register(engine_internal_ctx_t *ctx,
                        const char *name,
                        fc_callback_t callback,
                        void *user_ctx);

/** @brief 反初始化 FC 处理器 */
void fc_handler_deinit(engine_internal_ctx_t *ctx);

#ifdef __cplusplus
}
#endif

#endif /* CORE_FUNCTION_CALL_HANDLER_H */
