#!/usr/bin/env bash
# -----------------------------------------------------------------------------
# NodePilot - Agent-Befehl apt_update
# -----------------------------------------------------------------------------
# Aenderungslog
# 2026-03-15 | GPT-5.2-Codex | Datei neu erstellt. Fuehrt deterministisch
# `apt update` aus, liefert immer strukturiertes JSON mit status/stdout/stderr/
# exit_code sowie Metadaten und bricht mit fachlichem Fehler ab, falls keine
# Root-Rechte vorhanden sind.
# -----------------------------------------------------------------------------

set -euo pipefail

start_ms="$(date +%s%3N)"
ausfuehrung_befehl="apt update"
stdout_datei="$(mktemp)"
stderr_datei="$(mktemp)"

aufraeumen()
{
	rm -f "${stdout_datei}" "${stderr_datei}"
}
trap aufraeumen EXIT

if [ "${EUID}" -ne 0 ]; then
	ende_ms="$(date +%s%3N)"
	jq -n \
		--arg status "fehler" \
		--arg stdout_text "" \
		--arg stderr_text "Root-Rechte erforderlich: apt update muss als root ausgefuehrt werden." \
		--argjson exit_code 126 \
		--arg command "${ausfuehrung_befehl}" \
		--argjson dauer_ms "$((ende_ms-start_ms))" \
		'{status:$status,stdout_text:$stdout_text,stderr_text:$stderr_text,exit_code:$exit_code,meta:{command:$command,dauer_ms:$dauer_ms}}'
	exit 126
fi

set +e
DEBIAN_FRONTEND=noninteractive apt update >"${stdout_datei}" 2>"${stderr_datei}"
exit_code="$?"
set -e

stdout_text="$(cat "${stdout_datei}" 2>/dev/null || true)"
stderr_text="$(cat "${stderr_datei}" 2>/dev/null || true)"
status="ok"
if [ "${exit_code}" -ne 0 ]; then
	status="fehler"
fi

ende_ms="$(date +%s%3N)"
jq -n \
	--arg status "${status}" \
	--arg stdout_text "${stdout_text}" \
	--arg stderr_text "${stderr_text}" \
	--argjson exit_code "${exit_code}" \
	--arg command "${ausfuehrung_befehl}" \
	--argjson dauer_ms "$((ende_ms-start_ms))" \
	'{status:$status,stdout_text:$stdout_text,stderr_text:$stderr_text,exit_code:$exit_code,meta:{command:$command,dauer_ms:$dauer_ms}}'

exit "${exit_code}"
