#include "hybbx/entertain_config.h" #include "hybbx/instance.h" #include "hybbx/log.h" #include "hybbx/util.h" #include static hybbx_entertain_config_t g_entertain; static int g_entertain_ready; void hybbx_entertain_config_defaults(hybbx_entertain_config_t *cfg) { if (cfg == NULL) { return; } memset(cfg, 0, sizeof(*cfg)); cfg->enabled = 0; } void hybbx_entertain_config_apply(const hybbx_config_t *config) { hybbx_instance_role_t role; const char *legacy; hybbx_entertain_config_defaults(&g_entertain); g_entertain_ready = 1; if (config != NULL) { g_entertain.enabled = hybbx_config_get_bool(config, "entertain", "enabled", 0); /* Legacy: [networks] entertain= — prefer [entertain] enabled= */ legacy = hybbx_config_get(config, "networks", "entertain", NULL); if (legacy != NULL && legacy[0] != '\0' && !hybbx_config_get(config, "entertain", "enabled", NULL)) { g_entertain.enabled = hybbx_bool_is_true(legacy); hybbx_log_warn("[entertain] legacy [networks] entertain= — " "use [entertain] enabled=yes"); } } role = hybbx_instance_role(); if (g_entertain.enabled && role != HYBBX_INSTANCE_MAIN) { hybbx_log_warn("[entertain] Main / standalone Main only — forcing off " "(role=%s)", hybbx_instance_role_name()); g_entertain.enabled = 0; } hybbx_log_info("[entertain] enabled=%s (chess built-in; Main/standalone only)", hybbx_bool_to_string(g_entertain.enabled)); } const hybbx_entertain_config_t *hybbx_entertain_config_get(void) { if (!g_entertain_ready) { hybbx_entertain_config_defaults(&g_entertain); } return &g_entertain; } int hybbx_entertain_enabled(void) { return hybbx_entertain_config_get()->enabled; }