#ifndef BSPHP_CLIENT_H
#define BSPHP_CLIENT_H

#include <stddef.h>

typedef struct {
    const char *url;
    const char *mutual_key;
    const char *server_private_key;
    const char *client_public_key;
    const char *code_url_prefix;
    const char *signature_tail;
    char bsphp_sessl[256];
    int verbose;
} bsphp_client_t;

void bsphp_client_init(bsphp_client_t *c);
void bsphp_client_set_verbose(bsphp_client_t *c, int on);
void bsphp_client_set_signature_tail(bsphp_client_t *c, const char *tail);
void bsphp_client_set_sessl(bsphp_client_t *c, const char *sessl);

/* internet.in + BSphpSeSsL.in：初始化会话。 */
int bsphp_bootstrap(bsphp_client_t *c, char **out_resp);
/* gg.in：获取公告。 */
int bsphp_get_notice(bsphp_client_t *c, char **out_resp);
/* login.lg：账号登录（user/pwd/coode/key/maxoror）。 */
int bsphp_login_lg(bsphp_client_t *c, const char *user, const char *pwd, const char *coode, const char *machine_code, char **out_resp);
/* registration.lg：注册账号（常用字段）。 */
int bsphp_register_lg(bsphp_client_t *c,
                      const char *user, const char *pwd, const char *pwdb,
                      const char *mobile, const char *qq, const char *mail,
                      const char *mibao_wenti, const char *mibao_daan,
                      const char *coode, const char *machine_code, const char *extension,
                      char **out_resp);
/* cancellation.lg：账号注销。 */
int bsphp_logout_lg(bsphp_client_t *c, char **out_resp);
/* date.in：服务器时间。 */
int bsphp_get_server_date(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);
/* globalinfo.in：获取全局配置段。 */
int bsphp_get_global_info(bsphp_client_t *c, char **out_resp);
/* appcustom.in：获取自定义配置（info 常用值：myapp/myvip/mylogin）。 */
int bsphp_get_app_custom(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 可选，如 INGES_LOGIN）。 */
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);
/* vipdate.lg：账号到期时间。 */
int bsphp_get_end_time(bsphp_client_t *c, char **out_resp);
/* getuserinfo.lg：读取用户信息；info 可空，或传 "UserName,UserUID" 这类字段串。 */
int bsphp_get_user_info(bsphp_client_t *c, const char *info, char **out_resp);
/* userkey.lg：用户绑定特征 key。 */
int bsphp_get_user_key(bsphp_client_t *c, char **out_resp);
/* timeout.lg：登录心跳。 */
int bsphp_heartbeat_lg(bsphp_client_t *c, char **out_resp);
/* send_email.lg：发送邮箱验证码（scene 场景，email 邮箱，coode 图形验证码）。 */
int bsphp_send_email_code(bsphp_client_t *c, const char *scene, const char *email, const char *coode, char **out_resp);
/* register_email.lg：邮箱验证码注册。 */
int bsphp_register_email(bsphp_client_t *c, const char *user, const char *email, const char *email_code, const char *pwd, const char *pwdb, const char *key, const char *coode, char **out_resp);
/* login_email.lg：邮箱验证码登录（key/maxoror 通常为机器码）。 */
int bsphp_login_email(bsphp_client_t *c, const char *email, const char *email_code, const char *key, const char *maxoror, const char *coode, char **out_resp);
/* resetpwd_email.lg：邮箱验证码找回密码。 */
int bsphp_reset_email_pwd(bsphp_client_t *c, const char *email, const char *email_code, const char *pwd, const char *pwdb, const char *coode, char **out_resp);
/* send_sms.lg：发送短信验证码（scene 场景，mobile 手机号，area 区号）。 */
int bsphp_send_sms_code(bsphp_client_t *c, const char *scene, const char *mobile, const char *area, const char *coode, char **out_resp);
/* register_sms.lg：短信验证码注册。 */
int bsphp_register_sms(bsphp_client_t *c, const char *user, const char *mobile, const char *area, const char *sms_code, const char *pwd, const char *pwdb, const char *key, const char *coode, char **out_resp);
/* login_sms.lg：短信验证码登录（key/maxoror 通常为机器码）。 */
int bsphp_login_sms(bsphp_client_t *c, const char *mobile, const char *area, const char *sms_code, const char *key, const char *maxoror, const char *coode, char **out_resp);
/* resetpwd_sms.lg：短信验证码找回密码。 */
int bsphp_reset_sms_pwd(bsphp_client_t *c, const char *mobile, const char *area, const char *sms_code, const char *pwd, const char *pwdb, const char *coode, char **out_resp);
/* jiekey.lg：解绑账号机器。 */
int bsphp_unbind_lg(bsphp_client_t *c, const char *user, const char *pwd, char **out_resp);
/* chong.lg：账号充值（userset=1 表示按用户设置处理）。 */
int bsphp_pay_lg(bsphp_client_t *c, const char *user, const char *userpwd, int userset, const char *ka, const char *pwd, char **out_resp);
/* backto.lg：密保找回密码。 */
int bsphp_back_pass_lg(bsphp_client_t *c, const char *user, const char *pwd, const char *pwdb, const char *wenti, const char *daan, const char *coode, char **out_resp);
/* password.lg：修改密码（pwda 旧密码，pwdb 新密码，img 验证码）。 */
int bsphp_edit_pass_lg(bsphp_client_t *c, const char *user, const char *pwd, const char *pwda, const char *pwdb, const char *img, char **out_resp);
/* liuyan.in：意见反馈（table/leix/qq/txt/coode）。 */
int bsphp_feedback_lg(bsphp_client_t *c, const char *user, const char *pwd, const char *table, const char *qq, const char *leix, const char *txt, const char *coode, 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);

/* 底层发送：一般优先调用上面的业务封装函数。 */
int bsphp_send_raw(bsphp_client_t *c, const char *api, const char *extra_query, char **out_resp);

#endif
