#!/usr/bin/env bash
# Arch istemcisini xrm24 paket deposuna bağlar. Bir kez çalıştırılır.
# Sonrasında güncellemeler normal `sudo pacman -Syu` ile gelir.
#
#   sudo scripts/setup-pacman-repo.sh
#
# Depo HTTPS üzerinden, herkese açık bir organizasyonda yayınlanıyor
# (git.orilyon.com/xrm24) — yani ofis ağı dışından da erişilebilir.
# Orada kaynak kod YOK, yalnızca derlenmiş paketler var.
#
# Güvenliği taşıma + imza birlikte sağlıyor: sunucu paketleri kendi GPG
# anahtarıyla imzalıyor, pacman.conf'a SigLevel = Required yazılıyor.

set -euo pipefail

PUBLISH_URL="${PUBLISH_URL:-https://git.orilyon.com}"
PUBLISH_OWNER="${PUBLISH_OWNER:-xrm24}"
ARCH_REPO="${ARCH_REPO:-xrm24}"
CONF=/etc/pacman.conf
SERVER="${PUBLISH_URL}/api/packages/${PUBLISH_OWNER}/arch/\$repo/\$arch"

[[ $EUID -eq 0 ]] || { echo "root gerekiyor: sudo $0" >&2; exit 1; }

KEYFILE="$(mktemp)"
trap 'rm -f "$KEYFILE"' EXIT

echo "==> depo imza anahtarı indiriliyor"
curl -fsSL -o "$KEYFILE" "${PUBLISH_URL}/api/packages/${PUBLISH_OWNER}/arch/repository.key"

KEYID="$(gpg --show-keys --with-colons "$KEYFILE" | awk -F: '/^fpr:/ {print $10; exit}')"
[[ -n "$KEYID" ]] || { echo "anahtar okunamadı" >&2; exit 1; }
echo "    anahtar: $KEYID"

# Daha önce başka bir sunucunun anahtarını güvenilir yaptıysak (adres değişimi),
# onu kaldır. Aksi hâlde artık kullanmadığımız bir sunucunun imzası anahtarlıkta
# güvenilir kalmaya devam eder.
STATE=/etc/pacman.d/xrm24-repo-key
if [[ -f "$STATE" ]]; then
  PREV="$(tr -d '[:space:]' < "$STATE")"
  if [[ -n "$PREV" && "$PREV" != "$KEYID" ]]; then
    echo "==> eski depo anahtarı kaldırılıyor: $PREV"
    pacman-key --delete "$PREV" 2>/dev/null || echo "    (zaten yoktu)"
  fi
fi

echo "==> pacman anahtarlığına ekleniyor"
pacman-key --add "$KEYFILE"
pacman-key --lsign-key "$KEYID"
printf '%s\n' "$KEYID" > "$STATE"

cp "$CONF" "${CONF}.xrm24.bak"
if grep -q "^\[${ARCH_REPO}\]" "$CONF"; then
  # Bölüm zaten var (eski iç ağ adresinden geçiş olabilir): Server satırını
  # yenisiyle değiştir, mükerrer bölüm açma.
  echo "==> mevcut [$ARCH_REPO] bölümünün adresi güncelleniyor"
  python3 - "$CONF" "$ARCH_REPO" "$SERVER" <<'PY'
import re, sys
conf, repo, server = sys.argv[1], sys.argv[2], sys.argv[3]
text = open(conf).read()
pattern = re.compile(r'(\[' + re.escape(repo) + r'\][^\[]*)', re.S)
def fix(m):
    block = m.group(1)
    block = re.sub(r'(?m)^\s*Server\s*=.*$', 'Server = ' + server, block)
    if 'Server =' not in block:
        block = block.rstrip() + '\nServer = ' + server + '\n'
    if 'SigLevel' not in block:
        block = block.replace('[' + repo + ']', '[' + repo + ']\nSigLevel = Required', 1)
    return block
open(conf, 'w').write(pattern.sub(fix, text, count=1))
PY
else
  echo "==> $CONF güncelleniyor"
  cat >> "$CONF" <<EOF

[${ARCH_REPO}]
SigLevel = Required
Server = ${SERVER}
EOF
fi
echo "    yedek: ${CONF}.xrm24.bak"

echo "==> depo senkronize ediliyor"
pacman -Sy

echo
echo "Hazır. Kurulum / güncelleme:"
echo "  sudo pacman -S xrm24-desktop     # ilk kurulum"
echo "  sudo pacman -Syu                 # güncellemeler"
