#!/usr/bin/env bash
#
# onx-exim-vdomains-sync — Exim virtual_domains'i panel DB'sinden auto-sync
#
# v83.17: Exim ACL'sinde `relay_to_domains = lsearch;/etc/exim/virtual_domains`
# kullaniliyor. Default onx-mailserver-install BOS dosya olusturuyor → yeni
# eklenen mailbox'larin domain'leri burada YOK → Gmail "550 relay not permitted".
#
# Bu script panel DB'sinden email_accounts.domain DISTINCT cekip dosyayi yazar.
# Idempotent — re-run safe. Exim reload tetiklenmez (lsearch HOT — yeni request
# fresh okur). Ama yine de Exim restart edebilir (opsiyonel --reload flag).
#
# EmailAccount Model'inde created/deleted observer ile otomatik tetiklenir.

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

require_root

VDOMAINS_FILE="/etc/exim/virtual_domains"
PHP_BIN="${PHP_BIN:-/opt/remi/php82/root/usr/bin/php}"
ONOX_ROOT="${ONOX_ROOT:-/opt/onoxsoft}"

# Exim kurulu mu?
if [[ ! -d /etc/exim ]]; then
    onx_die 2 "Exim kurulu degil (/etc/exim yok) — sync gereksiz"
fi

# DB'den distinct domain listesi cek
DOMAINS=$("$PHP_BIN" -d display_errors=0 -d log_errors=0 -r "
try {
    require '$ONOX_ROOT/vendor/autoload.php';
    \$app = require '$ONOX_ROOT/bootstrap/app.php';
    \$app->make(Illuminate\Contracts\Console\Kernel::class)->bootstrap();
    foreach (DB::table('email_accounts')->select('domain')->distinct()->orderBy('domain')->pluck('domain') as \$d) {
        echo \$d . PHP_EOL;
    }
} catch (Throwable \$e) {
    fwrite(STDERR, 'db_error: ' . \$e->getMessage() . PHP_EOL);
    exit(1);
}
" 2>&1)
DB_EXIT=$?

if [[ $DB_EXIT -ne 0 ]]; then
    onx_die 3 "DB query basarisiz: $DOMAINS"
fi

# Atomic write (temp + mv — eski dosya bir an icin partial olmasin)
TMP=$(mktemp -p /etc/exim .vdomains-XXXXXX) || onx_die 3 "mktemp basarisiz"
if [[ -n "$DOMAINS" ]]; then
    echo "$DOMAINS" > "$TMP"
fi
chmod 0644 "$TMP"
mv -f "$TMP" "$VDOMAINS_FILE"

# Count for output
COUNT=$(wc -l < "$VDOMAINS_FILE" 2>/dev/null || echo 0)

onx_json_out \
    ok true \
    file "$VDOMAINS_FILE" \
    domain_count "$COUNT" \
    reload_required "false" \
    message "Exim virtual_domains sync edildi (lsearch hot — Exim restart gerek yok)"
