#!/usr/bin/env bash
#
# onx-webserver-update — Web server driver paketini güncelle (dnf/apt update).
#
# Input: {"driver":"...","package":"httpd|nginx|...","service":"..."}
# Output: {"ok":true,"updated":true,"version_before":"X","version_after":"Y","message":"..."}

set -uo pipefail

input="$(cat 2>/dev/null || echo '{}')"
driver="$(echo "$input" | jq -r '.driver // empty')"
package="$(echo "$input" | jq -r '.package // empty')"
service="$(echo "$input" | jq -r '.service // empty')"

[[ -z "$driver" || -z "$package" ]] && { jq -nc '{ok:false,error:"driver+package required"}' >&2; exit 1; }

get_version() {
    case "$1" in
        apache)         httpd -v 2>/dev/null | head -1 | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1 ;;
        nginx)          nginx -v 2>&1 | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1 ;;
        openlitespeed)  /usr/local/lsws/bin/lshttpd -v 2>/dev/null | head -1 | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1 ;;
        caddy)          caddy version 2>/dev/null | head -1 | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1 ;;
        *)              echo "" ;;
    esac
}
version_before="$(get_version "$driver")"
[[ -z "$version_before" ]] && version_before="unknown"

rc=0
out=""
if [[ -f /etc/debian_version ]]; then
    out="$(DEBIAN_FRONTEND=noninteractive apt-get install --only-upgrade -y "$package" 2>&1)"
    rc=$?
else
    out="$(dnf upgrade -y "$package" 2>&1)"
    rc=$?
fi

version_after="$(get_version "$driver")"
[[ -z "$version_after" ]] && version_after="unknown"

if [[ -n "$service" ]] && systemctl is-active --quiet "$service" 2>/dev/null; then
    systemctl reload "$service" 2>/dev/null || systemctl restart "$service" 2>/dev/null || true
fi

if [[ "$version_before" == "$version_after" ]]; then
    msg="Paket zaten en son sürümde (${version_after})."
else
    msg="Güncelleme: ${version_before} → ${version_after}"
fi

jq -nc \
    --arg driver "$driver" --arg package "$package" \
    --arg before "$version_before" --arg after "$version_after" \
    --arg message "$msg" --argjson rc "$rc" \
    '{ok:($rc==0), updated:($before != $after), driver:$driver,
      version_before:$before, version_after:$after, message:$message, rc:$rc}'
