#!/usr/bin/env bash
set -euo pipefail

CPUS_FILE="/sys/devices/cpu_atom/cpus"

if [[ $EUID -ne 0 ]]; then
    echo "Error: This script must be run as root (use sudo)." >&2
    exit 1
fi

if [[ ! -r "$CPUS_FILE" ]]; then
    echo "Error: Atom CPU topology node '$CPUS_FILE' not found or unreadable." >&2
    exit 1
fi

CPUS="$(<"$CPUS_FILE")"

if [[ -z "$CPUS" ]]; then
    echo "Error: Atom CPU affinity mask read from '$CPUS_FILE' is empty." >&2
    exit 1
fi

echo "Applying CPUAffinity=${CPUS} to systemd core daemons..."

SERVICES=(
    "systemd-resolved.service"
    "systemd-networkd.service"
    "systemd-journald.service"
    "systemd-timesyncd.service"
)

for svc in "${SERVICES[@]}"; do
    dropin_dir="/etc/systemd/system/${svc}.d"
    override_file="${dropin_dir}/override.conf"

    mkdir -p "$dropin_dir"
    printf "[Service]\nCPUAffinity=%s\n" "$CPUS" > "$override_file"
    echo "  [+] Configured ${override_file}"
done

echo "Reloading systemd daemon..."
systemctl daemon-reload

echo "Restarting services..."
for svc in "${SERVICES[@]}"; do
    # Only restart if active/enabled to avoid starting unconfigured or dormant daemons
    if systemctl is-active --quiet "$svc"; then
        systemctl restart "$svc"
        echo "  [+] Restarted ${svc}"
    else
        echo "  [-] Skipped restart for ${svc} (not currently active)"
    fi
done

echo -e "\nVerification:"
for svc in "${SERVICES[@]}"; do
    affinity="$(systemctl show "$svc" -p CPUAffinity --value)"
    printf "  %-26s CPUAffinity=%s\n" "$svc" "$affinity"
done
