#!/usr/bin/env bash
# onx-postfix-cf-write — /etc/postfix/main.cf dosyasını DB ayarlarından yazar.
# stdin: {"settings":[{"key":"myhostname","value":"mail.onox.com.tr"},…]}
# stdout: {"main_cf_path":"…","checked":true,"backup":"…","lines_written":N}

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

require_root
require_cmd postfix

INPUT=$(cat)

# settings dizisi — jq ile veya basit yöntemle parse et
if ! command -v jq &>/dev/null; then
    json_fail 2 "jq kurulu değil; bu script jq gerektirir"
fi

# Doğrulama: settings alanı var mı?
SETTINGS_LEN=$(echo "$INPUT" | jq '.settings | length' 2>/dev/null || echo 0)
if [[ "$SETTINGS_LEN" -lt 1 ]]; then
    json_fail 1 "Geçersiz girdi: 'settings' dizisi boş veya eksik"
fi

CF=/etc/postfix/main.cf
TS=$(date +%s)
BACKUP="${CF}.bak.${TS}"

# Mevcut dosyayı yedekle
if [[ -f "$CF" ]]; then
    cp "$CF" "$BACKUP"
fi

# main.cf yaz
{
    echo "# ONOX-managed Postfix configuration"
    echo "# Generated by onx-postfix-cf-write — do not edit manually"
    echo "# Edit via Admin Panel → Yapılandırma → Postfix"
    echo "# Generated: $(date -Iseconds)"
    echo ""
    echo "$INPUT" | jq -r '.settings[] | "\(.key) = \(.value)"'
} > "$CF"

LINES=$(grep -c '=' "$CF" || true)

# Sözdizimi kontrolü
if ! postfix check 2>/dev/null; then
    # Geri al
    if [[ -f "$BACKUP" ]]; then
        cp "$BACKUP" "$CF"
    fi
    json_fail 3 "postfix check başarısız — eski konfigürasyon geri yüklendi"
fi

json_ok "{\"main_cf_path\":\"${CF}\",\"checked\":true,\"backup\":\"${BACKUP}\",\"lines_written\":${LINES}}"
