#!/usr/bin/env bash
# onx-php-ext-uninstall — Remove a PHP extension from a specific PHP version.
#
# Input (stdin JSON):
#   version    string   PHP majör.minör (örn "8.3")
#   extension  string
#
# Output (stdout JSON):
#   {"uninstalled":true, "version":"8.3", "extension":"imagick", "package":"..."}
#
# Exit codes: 0=ok 1=invalid-input 2=preflight-fail 3=exec-fail
#
# Deployed to: /usr/local/onoxsoft/bin/onx-php-ext-uninstall

set -euo pipefail

SCRIPT_DIR="$(dirname "$(readlink -f "$0")")"
# shellcheck source=_lib/common.sh
source "${SCRIPT_DIR}/_lib/common.sh"

INPUT=$(cat)
onx_require_json "${INPUT}"

VERSION=$(onx_json_get "${INPUT}" "version")
EXT=$(onx_json_get "${INPUT}" "extension")

[[ -z "${VERSION}" || -z "${EXT}" ]] && onx_die 1 "version and extension are required"
[[ "${VERSION}" =~ ^[78]\.[0-9]$ ]] || onx_die 1 "version must be x.y"
[[ "${EXT}" =~ ^[a-z0-9_]+$ ]] || onx_die 1 "extension must match [a-z0-9_]+"

# Critical extensions guard — bunlar olmadan FPM kapanır
CRITICAL_EXTS=(core mysqli pdo opcache mbstring xml session reflection spl pcre)
for c in "${CRITICAL_EXTS[@]}"; do
    if [[ "${EXT}" == "${c}" ]]; then
        onx_die 2 "extension '${EXT}' is critical and cannot be removed"
    fi
done

VERSION_NODOT="${VERSION//./}"
FPM_UNIT="php${VERSION_NODOT}-php-fpm"

[[ $EUID -eq 0 ]] || onx_die 2 "must be run as root"

PKG_NAME=""
if command -v dnf >/dev/null 2>&1; then
    PKG_NAME="php${VERSION_NODOT}-php-${EXT}"
    onx_log "Removing ${PKG_NAME}"
    dnf remove -y "${PKG_NAME}" 2>/dev/null || onx_die 3 "dnf remove failed"
elif command -v apt >/dev/null 2>&1; then
    PKG_NAME="php${VERSION}-${EXT}"
    apt remove --purge -y "${PKG_NAME}" 2>/dev/null || onx_die 3 "apt remove failed"
else
    onx_die 2 "neither dnf nor apt available"
fi

systemctl reload "${FPM_UNIT}" 2>/dev/null \
    || systemctl restart "${FPM_UNIT}" 2>/dev/null || true

onx_json_out \
    "uninstalled" "true" \
    "version"     "${VERSION}" \
    "extension"   "${EXT}" \
    "package"     "${PKG_NAME}"

onx_log "Extension ${EXT} removed from PHP ${VERSION}"
