#!/usr/bin/env bash
#
# onx-mailserver-uninstall — Mail server (MTA) driver paketini kaldır.
#
# Input (stdin JSON):
#   {
#     "driver":  "postfix" | "exim",     # zorunlu
#     "package": "postfix" | "exim",     # ops
#     "service": "postfix" | "exim"      # ops
#   }
#
# Output (stdout JSON):
#   {
#     "ok":         true,
#     "uninstalled": true,
#     "driver":      "exim",
#     "package":     "exim",
#     "config_backup": "/etc/exim.backup.1748044800",
#     "message":     "Exim kaldırıldı. Config yedeği saklandı."
#   }
#
# Güvenlik:
#   - Aktif MTA kaldırılamaz (port 25 servis kesintisi) — önce Switch ŞART
#   - Config dosyaları SİLİNMEZ — /etc/<driver> dizini timestamp'li yedeklenir
#   - Mailbox spool (/var/spool/postfix, /var/spool/exim) DOKUNULMAZ — kullanıcı
#     mail kuyrukları korunur (yeniden kurulumda devam eder)
#
# Pattern: onx-webserver-uninstall ile birebir aynı yaklaşım.

set -uo pipefail

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

require_root

# ─── Input parse ─────────────────────────────────────────────────────────────
INPUT="$(cat 2>/dev/null || echo '{}')"
onx_require_json "$INPUT"

driver="$(onx_json_get "$INPUT" driver)"
package="$(onx_json_get "$INPUT" package)"
service="$(onx_json_get "$INPUT" service)"

[[ -z "$driver" ]] && onx_die 1 "driver required"

# Driver'dan defaults türet
case "$driver" in
    postfix)
        [[ -z "$package" ]] && package="postfix"
        [[ -z "$service" ]] && service="postfix"
        config_dir="/etc/postfix"
        ;;
    exim)
        [[ -z "$package" ]] && package="exim"
        [[ -z "$service" ]] && service="exim"
        config_dir="/etc/exim"
        ;;
    *)
        onx_die 1 "unknown driver '$driver' (postfix|exim)"
        ;;
esac

# ─── Aktif kontrolü — kaldırma engeli ─────────────────────────────────────────
# Servis ACTIVE durumdaysa kaldırmak port 25'i tek başına bırakmaz ama
# sistem mail kuyruğu durur. Önce Switch yapılmalı.
if systemctl is-active --quiet "$service" 2>/dev/null; then
    onx_log "mailserver-uninstall BLOCK driver=${driver} reason=service-active"
    onx_die 2 "Aktif servis (${service}) kaldırılamaz — önce diğer MTA'ya Switch yapın, sonra kaldırın."
fi

# ─── Config backup ───────────────────────────────────────────────────────────
ts=$(date +%s)
config_backup=""
if [[ -d "$config_dir" ]]; then
    config_backup="${config_dir}.backup.${ts}"
    cp -a "$config_dir" "$config_backup" 2>/dev/null || {
        onx_log "mailserver-uninstall: config backup başarısız (${config_dir} → ${config_backup})"
        config_backup=""
    }
fi

# ─── systemd disable + paket kaldır ──────────────────────────────────────────
systemctl disable "$service" >/dev/null 2>&1 || true
systemctl stop "$service" >/dev/null 2>&1 || true

OS_FAMILY="rhel"
if [[ -f /etc/debian_version ]]; then
    OS_FAMILY="debian"
fi

if [[ "$OS_FAMILY" == "debian" ]]; then
    # Exim debian'da exim4-* alt paketleri içerir; * ile süpür
    case "$driver" in
        exim) DEBIAN_FRONTEND=noninteractive apt-get remove -y 'exim4*' >/dev/null 2>&1 ;;
        *)    DEBIAN_FRONTEND=noninteractive apt-get remove -y "$package" >/dev/null 2>&1 ;;
    esac
    remove_rc=$?
else
    dnf remove -y "$package" >/dev/null 2>&1
    remove_rc=$?
fi

if [[ $remove_rc -ne 0 ]]; then
    onx_log "mailserver-uninstall FAIL driver=${driver} rc=${remove_rc}"
    onx_die 3 "Paket kaldırma başarısız (rc=${remove_rc})"
fi

onx_log "mailserver-uninstall OK driver=${driver} config_backup=${config_backup}"

# ─── Output ──────────────────────────────────────────────────────────────────
msg="${driver^} kaldırıldı."
if [[ -n "$config_backup" ]]; then
    msg="${msg} Config yedeği: ${config_backup}"
fi

onx_json_out \
    ok            true \
    uninstalled   true \
    driver        "$driver" \
    package       "$package" \
    config_backup "${config_backup:-none}" \
    message       "$msg"
