#ifndef BSPHP_CLIENT_H
#define BSPHP_CLIENT_H

typedef struct {
    const char *url;
    const char *mutual_key;
    const char *server_private_key;
    const char *client_public_key;
    const char *signature_tail;
    char bsphp_sessl[256];
    int verbose; /* 非 0 时在 CMD 打印加解密过程 */
} bsphp_client_t;

/* 初始化客户端配置（url/mutual/key/signature_tail）。 */
void bsphp_client_init(bsphp_client_t *c);
/* 开关详细日志（on=1 打印完整加解密过程）。 */
void bsphp_client_set_verbose(bsphp_client_t *c, int on);
/* 设置签名尾（"json" 或 "XML"）。 */
void bsphp_client_set_signature_tail(bsphp_client_t *c, const char *tail);
/* 启动握手：internet.in + BSphpSeSsL.in。 */
int bsphp_bootstrap(bsphp_client_t *c, char **out_resp);
/* 卡登录：icid=卡号，icpwd=卡密，machine_code=机器码（key/maxoror）。 */
int bsphp_login_ic(bsphp_client_t *c, const char *icid, const char *icpwd, const char *machine_code, char **out_resp);
/* 读取卡信息字段：ic_carid/ic_pwd/info（如 UserName）。 */
int bsphp_get_card_info(bsphp_client_t *c, const char *ic_carid, const char *ic_pwd, const char *info, char **out_resp);
/* 获取卡到期时间（getdate.ic）。 */
int bsphp_get_date_ic(bsphp_client_t *c, char **out_resp);
/* 获取当前登录状态（getlkinfo.ic）。 */
int bsphp_get_login_info(bsphp_client_t *c, char **out_resp);
/* 心跳保活（timeout.ic）。 */
int bsphp_heart_ic(bsphp_client_t *c, char **out_resp);
/* 获取公告（gg.in）。 */
int bsphp_get_notice(bsphp_client_t *c, char **out_resp);
/* v.in：获取版本信息。 */
int bsphp_get_version(bsphp_client_t *c, char **out_resp);
/* miao.in：获取软件描述。 */
int bsphp_get_soft_info(bsphp_client_t *c, char **out_resp);
/* url.in：获取预设 URL（备用地址）。 */
int bsphp_get_preset_url(bsphp_client_t *c, char **out_resp);
/* weburl.in：获取 Web 页面地址。 */
int bsphp_get_web_url(bsphp_client_t *c, char **out_resp);
/* date.in：获取服务器时间；m 可传格式字符串。 */
int bsphp_get_server_date(bsphp_client_t *c, const char *m, char **out_resp);
/* globalinfo.in：获取全局配置；info 可选。 */
int bsphp_get_global_info(bsphp_client_t *c, const char *info, char **out_resp);
/* imga.in：获取验证码信息。 */
int bsphp_get_captcha_info(bsphp_client_t *c, char **out_resp);
/* getsetimag.in：获取验证码开关；type 可选。 */
int bsphp_get_set_imag(bsphp_client_t *c, const char *type, char **out_resp);
/* logica.in：读取布尔逻辑 A。 */
int bsphp_get_logic_a(bsphp_client_t *c, char **out_resp);
/* logicb.in：读取布尔逻辑 B。 */
int bsphp_get_logic_b(bsphp_client_t *c, char **out_resp);
/* logicinfoa.in：读取逻辑 A 文本。 */
int bsphp_get_logic_info_a(bsphp_client_t *c, char **out_resp);
/* logicinfob.in：读取逻辑 B 文本。 */
int bsphp_get_logic_info_b(bsphp_client_t *c, char **out_resp);
/* 查询卡信息（socard.in，cardid=卡号）。 */
int bsphp_query_card(bsphp_client_t *c, const char *cardid, char **out_resp);
/* 绑定机器（setcaron.ic，key=机器码）。 */
int bsphp_bind_card(bsphp_client_t *c, const char *key, const char *icid, const char *icpwd, char **out_resp);
/* 解绑机器（setcarnot.ic）。 */
int bsphp_unbind_card(bsphp_client_t *c, const char *icid, const char *icpwd, char **out_resp);
/* appcustom.in：获取自定义配置；info 必传，其余参数可选。 */
int bsphp_get_app_custom(bsphp_client_t *c, const char *info, const char *get_type, const char *user, const char *pwd, const char *icid, const char *icpwd, char **out_resp);
/* getdata.ic：读取验证 key 对应值。 */
int bsphp_get_data_ic(bsphp_client_t *c, const char *key, char **out_resp);
/* AddCardFeatures.key.ic：追加机器特征。 */
int bsphp_add_card_features(bsphp_client_t *c, const char *carid, const char *key, const char *maxoror, char **out_resp);
/* remotecancellation.ic：远程解绑/注销；type 必传，biaoji 可选。 */
int bsphp_remote_cancellation(bsphp_client_t *c, const char *icid, const char *icpwd, const char *type, const char *biaoji, char **out_resp);
/* chong.ic：卡充值。 */
int bsphp_recharge_card(bsphp_client_t *c, const char *icid, const char *ka, const char *pwd, char **out_resp);
/* liuyan.in：意见反馈（table/leix/qq/txt，img/user/pwd 可选）。 */
int bsphp_feedback_ic(bsphp_client_t *c, const char *table, const char *leix, const char *qq, const char *txt, const char *img, const char *user, const char *pwd, char **out_resp);
/* CallRemote.in：中转 URL 调用。 */
int bsphp_call_remote(bsphp_client_t *c, const char *datas, char **out_resp);
/* GetMyData.in：读取自定义键值。 */
int bsphp_get_my_data(bsphp_client_t *c, const char *keys, char **out_resp);
/* SetMysData.in：写入自定义键值。 */
int bsphp_set_my_data(bsphp_client_t *c, const char *keys, const char *datas, char **out_resp);
/* appbadpush.in：上报异常日志。 */
int bsphp_app_bad_push(bsphp_client_t *c, const char *table, char **out_resp);
/* SetAppRemarks.ic：设置卡备注。 */
int bsphp_set_app_remarks(bsphp_client_t *c, const char *icid, const char *icpwd, const char *remarks, char **out_resp);
/* 注销登录（cancellation.ic）。 */
int bsphp_logout_ic(bsphp_client_t *c, char **out_resp);
/* 通用接口调用：api=接口名，extra_query=额外参数串("k1=v1&k2=v2")。 */
int bsphp_api_call(bsphp_client_t *c, const char *api, const char *extra_query, char **out_resp);

#endif
