<?php

/**
 * Merge a single-section POST body with current DB values so that
 * AdminSettingsService::updateFromAdmin() only updates the fields owned
 * by that section.
 *
 * Why this exists:
 * updateFromAdmin() reads all known keys from the POST array and defaults
 * missing keys to 0/empty/false (see sanitize* methods). Subpages that post
 * only their own fields would otherwise wipe unrelated sections. This helper
 * overlays the section's POST fields onto the current DB values formatted as
 * POST scalars, preserving checkbox semantics (omitted key = unchecked).
 *
 * @param array<string, mixed> $currentValues  'values' map from buildPageData()
 * @param array<string, mixed> $post           user POST body (bodyAll())
 * @param list<string>         $sectionKeys    keys owned by this section
 * @return array<string, mixed>
 */
function settingsSectionMergePost(array $currentValues, array $post, array $sectionKeys): array
{
    $seed = [];
    foreach ($currentValues as $key => $value) {
        if (is_bool($value)) {
            if ($value) {
                $seed[$key] = '1';
            }
            continue;
        }
        if (is_array($value)) {
            $seed[$key] = $value;
            continue;
        }
        if ($value !== null) {
            $seed[$key] = (string) $value;
        }
    }

    foreach ($sectionKeys as $key) {
        unset($seed[$key]);
        if (array_key_exists($key, $post)) {
            $seed[$key] = $post[$key];
        }
    }

    return $seed;
}
