‚GET‘,
‚callback‘ => ‚fmlc_rest_get‘,
‚permission_callback‘ => ‚__return_true‘,
]);

register_rest_route(‚fmlc/v1‘, ‚/set‘, [
‚methods‘ => ‚POST‘,
‚callback‘ => ‚fmlc_rest_set‘,
‚permission_callback‘ => ‚__return_true‘,
]);
});

// Preflight (OPTIONS) abfangen – WordPress beantwortet OPTIONS automatisch für REST.
// Falls dein Hoster blockt, kannst du hier notfalls selbst handeln.

// === Helpers ===
function fmlc_check_token(\WP_REST_Request $req) {
$hdr = $req->get_header(‚X-FMLC-Token‘);
$q = $req->get_param(‚token‘);
$ok = FMLC_TOKEN && ($hdr === FMLC_TOKEN || $q === FMLC_TOKEN);
if (!$ok) {
return new \WP_Error(‚forbidden‘, ‚Invalid token‘, [’status‘ => 403]);
}
return true;
}

function fmlc_option_key($site, $page) {
$site = trim((string)$site);
$page = trim((string)$page);
$hash = md5($site . ‚::‘ . $page);
return ‚fmlc_map_‘ . $hash;
}

function fmlc_load_map($site, $page) {
$key = fmlc_option_key($site, $page);
$json = get_option($key, ‚{}‘);
$map = json_decode($json, true);
if (!is_array($map)) $map = [];
return $map;
}

function fmlc_save_map($site, $page, array $map) {
$key = fmlc_option_key($site, $page);
return update_option($key, wp_json_encode($map), false);
}

// === REST Callbacks ===
function fmlc_rest_get(\WP_REST_Request $req) {
$tok = fmlc_check_token($req);
if ($tok instanceof \WP_Error) return $tok;

$site = $req->get_param(’site‘);
$page = $req->get_param(‚page‘);
if (!$site || !$page) {
return new \WP_Error(‚bad_request‘, ‚Missing site or page‘, [’status‘ => 400]);
}

$map = fmlc_load_map($site, $page); // [‚key‘ => ‚1‘|’0′]
return new \WP_REST_Response([
’site‘ => $site,
‚page‘ => $page,
‚data‘ => $map,
], 200);
}

function fmlc_rest_set(\WP_REST_Request $req) {
$tok = fmlc_check_token($req);
if ($tok instanceof \WP_Error) return $tok;

$params = $req->get_json_params();
if (empty($params)) {
// Fallback: x-www-form-urlencoded
$params = $req->get_params();
}

$site = $params[’site‘] ?? “;
$page = $params[‚page‘] ?? “;
$group = $params[‚group‘] ?? “;
$key = $params[‚key‘] ?? “;
$label = $params[‚label‘] ?? “;
$checked = $params[‚checked‘] ?? null;

if (!$site || !$page || !$key || $checked === null) {
return new \WP_Error(‚bad_request‘, ‚Missing fields‘, [’status‘ => 400]);
}

$map = fmlc_load_map($site, $page);
$map[$key] = ((string)$checked === ‚1‘) ? ‚1‘ : ‚0‘;
fmlc_save_map($site, $page, $map);

// Optional: Einfaches Log pro Aktion (deaktiviert standardmäßig)
// $log_key = ‚fmlc_log_‘ . md5($site.‘::‘.$page);
// add_option($log_key.‘::‘.time(), wp_json_encode(compact(’site‘,’page‘,’group‘,’key‘,’label‘,’checked‘)));

return new \WP_REST_Response([‚ok‘ => true], 200);
}