#!/usr/bin/env bash
#
# onx-webserver-config-test — driver-specific config syntax test
#
# Input: {"driver":"apache|nginx|openlitespeed|caddy"}
# Output: {"ok":true|false,"driver":"...","output":"...","rc":N}
#
# v87 Agent 4 fix: Eski versiyon `jq --arg output "$out"` ile çağırıyordu.
# `nginx -t` veya `httpd -t` çok satırlı debug çıktısı verince (özellikle 100+
# vhost'lu üretimde) komut satırı argümanı /bin/jq için ARG_MAX'i (128KB Linux
# default) aşıyor → "Argument list too long" exec hatası. Bu kritik çünkü
# Switch validation/preflight'ta config test fail eder, panel "503 Service
# Unavailable" döner.
#
# Fix: $out STDIN üzerinden jq'ya pipe → ARG_MAX limiti yok.

set -uo pipefail
input="$(cat 2>/dev/null || echo '{}')"
driver="$(printf '%s' "$input" | jq -r '.driver // empty')"

out=""
rc=0
case "$driver" in
    apache)
        out="$(httpd -t 2>&1)"
        rc=$?
        ;;
    nginx)
        out="$(nginx -t 2>&1)"
        rc=$?
        ;;
    openlitespeed)
        # OLS doesn't have direct syntax check, use /usr/local/lsws/bin/lswsctrl
        out="$(/usr/local/lsws/bin/lshttpd -t 2>&1)"
        rc=$?
        ;;
    caddy)
        out="$(caddy validate --config /etc/caddy/Caddyfile 2>&1)"
        rc=$?
        ;;
    *)
        jq -nc --arg d "$driver" '{ok:false,error:"unknown driver",driver:$d}' >&2; exit 1
        ;;
esac

# v87 Agent 4: Pipe $out via stdin (-R --slurp) — komut satırı arg değil.
# jq --rawfile / @json builder hem güvenli hem ARG_MAX-bağımsız.
#
# Akış: $out → printf → jq stdin (input olarak slurp) → @json filter
# @json: \"-escape + tüm tehlikeli karakterleri (newline, quote, backslash) doğru kodlar.
printf '%s' "$out" | jq -Rsc \
    --arg driver "$driver" \
    --argjson rc "$rc" \
    '{ok:($rc==0), driver:$driver, output:., rc:$rc}'
