/**
 * @file hal_http.h
 * @brief HTTP 客户端 HAL 接口
 */

#ifndef HAL_HTTP_H
#define HAL_HTTP_H

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

#ifdef __cplusplus
extern "C" {
#endif

/** HTTP 客户端句柄 */
typedef void *hal_http_handle_t;

/** HTTP 响应 */
typedef struct {
    int      status_code;  /* HTTP 状态码 */
    char    *body;         /* 响应体 */
    size_t   body_len;     /* 响应体字节数 */
} hal_http_response_t;

/** @brief 创建 HTTP 客户端 */
hal_http_handle_t hal_http_create(void);

/**
 * @brief 发送 POST 请求
 * @param url          目标 URL
 * @param content_type Content-Type 值
 * @param body         请求体
 * @param body_len     请求体字节数
 * @param response     输出响应结构
 * @return 0 成功，负值失败
 */
int hal_http_post(hal_http_handle_t handle,
                  const char *url,
                  const char *content_type,
                  const void *body,
                  size_t body_len,
                  hal_http_response_t *response);

/**
 * @brief 发送 GET 请求
 * @param url       目标 URL
 * @param response  输出响应结构
 * @return 0 成功，负值失败
 */
int hal_http_get(hal_http_handle_t handle,
                 const char *url,
                 hal_http_response_t *response);

/** @brief 释放响应资源（使用后必须调用）*/
void hal_http_response_free(hal_http_response_t *response);

/** @brief 销毁 HTTP 客户端 */
void hal_http_destroy(hal_http_handle_t handle);

#ifdef __cplusplus
}
#endif

#endif /* HAL_HTTP_H */
