#!/bin/bash
# ============================================================
# textlib.hu Debian repository beállító szkript
# Támogatott: Debian 6 (Squeeze) ... 13 (Trixie)
#
# Használat:
#   sudo ./setup-textlib-repo.sh        # textlib.hu repo
#   sudo ./setup-textlib-repo.sh z1     # z1 mirror repo
# ============================================================

set -e

REPO_URL_HTTP="http://textlib.hu/debian"
REPO_URL_HTTPS="https://textlib.hu/debian"
DEARMOR_URL="${REPO_URL_HTTPS}/textlib.dearmor.gpg"
SOURCES_FILE="/etc/apt/sources.list"

# --- Paraméter: z1 mirror? ------------------------------------
if [ "${1}" = "z1" ]; then
    MIRROR_URL="http://z1.iksw.hu/textlib/tlver2.next/debian"
    MIRROR_MODE=true
else
    MIRROR_URL=""
    MIRROR_MODE=false
fi

# A deb sorban használt URL: mirror esetén azt, egyébként http/https a Debian verziótól függ
# (DEB_LINE_* változók a verzió ismerete után állítódnak be)

# --- Debian verzió lekérése ------------------------------------
if [ -f /etc/debian_version ]; then
    DEBIAN_VERSION_RAW=$(cat /etc/debian_version)
else
    echo "HIBA: Ez nem Debian rendszer (/etc/debian_version nem található)."
    exit 1
fi

# Főverziószám kinyerése (pl. "12.5" -> 12, "bookworm/sid" -> os-release-ből)
DEBIAN_MAJOR=$(echo "$DEBIAN_VERSION_RAW" | grep -oP '^\d+' || true)

# Ha nem szám (pl. "bookworm/sid"), próbáljuk os-release-ből
if [ -z "$DEBIAN_MAJOR" ]; then
    if [ -f /etc/os-release ]; then
        DEBIAN_MAJOR=$(grep -oP '(?<=VERSION_ID=")[0-9]+' /etc/os-release || true)
    fi
fi

echo "============================================="
echo " textlib.hu Debian repository beállítása"
echo "============================================="
echo " Debian verzió : ${DEBIAN_VERSION_RAW} (főverzió: ${DEBIAN_MAJOR:-ismeretlen})"
echo " Sources fájl  : ${SOURCES_FILE}"
if $MIRROR_MODE; then
    echo " Mirror        : ${MIRROR_URL}"
fi
echo "---------------------------------------------"

# Verzió ellenőrzés
if [ -z "$DEBIAN_MAJOR" ]; then
    echo "FIGYELMEZTETÉS: Nem sikerült a Debian főverziószámát meghatározni."
    echo "  Folytatás feltételezett újabb módszerrel..."
    DEBIAN_MAJOR=99
fi

if [ "$DEBIAN_MAJOR" -lt 6 ] 2>/dev/null; then
    echo "HIBA: Debian $DEBIAN_MAJOR nem támogatott (minimum: Debian 6)."
    exit 1
fi

# --- Módszer kiválasztása verzió alapján -----------------------
# Debian 6-9:  apt-key add  (régi módszer)
# Debian 10+:  /etc/apt/keyrings + signed-by (új módszer)

if [ "$DEBIAN_MAJOR" -le 9 ]; then
    METHOD="legacy"
else
    METHOD="modern"
fi

echo " Kulcskezelési módszer: ${METHOD} (Debian ${DEBIAN_MAJOR})"
echo "---------------------------------------------"

# --- deb sorok összeállítása -----------------------------------
if $MIRROR_MODE; then
    DEB_LINE_LEGACY="deb ${MIRROR_URL} V2 main"
else
    DEB_LINE_LEGACY="deb ${REPO_URL_HTTP} V2 main"
fi

# ===============================================================
# Közös segédfüggvény: szerepel-e már a megfelelő repo sor?
# ===============================================================
sources_has_textlib() {
    if $MIRROR_MODE; then
        grep -q "z1\.iksw\.hu" "$SOURCES_FILE" 2>/dev/null
    else
        grep -q "textlib\.hu" "$SOURCES_FILE" 2>/dev/null
    fi
}

# ===============================================================
# RÉGI MÓDSZER: Debian 6.9 (apt-key add)
# ===============================================================
if [ "$METHOD" = "legacy" ]; then

    # Kulcs ellenőrzés
    if apt-key list 2>/dev/null | grep -qi "textlib"; then
        echo " [OK] A textlib.hu GPG kulcs már szerepel az apt-key listában."
        ALREADY_KEY=true
    else
        ALREADY_KEY=false
    fi

    # Forrás ellenőrzés
    if sources_has_textlib; then
        echo " [OK] A repo sor már szerepel: ${SOURCES_FILE}"
        ALREADY_SOURCE=true
    else
        ALREADY_SOURCE=false
    fi

    if $ALREADY_KEY && $ALREADY_SOURCE; then
        echo ""
        echo " Minden már be van állítva, nincs teendő."
        echo "============================================="
        exit 0
    fi

    # GPG kulcs letöltése és hozzáadása (dearmored bináris formátum)
    if ! $ALREADY_KEY; then
        TMP_KEY=$(mktemp)
        echo " [*] Dearmored GPG kulcs letöltése: ${DEARMOR_URL}"
        if wget -q --no-check-certificate -O "${TMP_KEY}" "${DEARMOR_URL}"; then
            echo " [OK] Kulcs letöltve."
        else
            echo " HIBA: Nem sikerült a GPG kulcsot letölteni!"
            rm -f "${TMP_KEY}"
            exit 1
        fi
        if apt-key add "${TMP_KEY}"; then
            echo " [OK] GPG kulcs hozzáadva az apt-key tárolóhoz."
        else
            echo " HIBA: apt-key add sikertelen!"
            rm -f "${TMP_KEY}"
            exit 1
        fi
        rm -f "${TMP_KEY}"
    fi

    # Forrás sor hozzáfűzése
    if ! $ALREADY_SOURCE; then
        echo " [*] Sor hozzáfűzése: ${SOURCES_FILE}"
        echo "" >> "$SOURCES_FILE"
        echo "# textlib.hu Debian repository (hozzáadva: $(date '+%Y-%m-%d'))" >> "$SOURCES_FILE"
        echo "${DEB_LINE_LEGACY}" >> "$SOURCES_FILE"
        echo " [OK] Hozzáfűzve: ${DEB_LINE_LEGACY}"
    fi

fi

# ===============================================================
# ÚJ MÓDSZER: Debian 10+ (keyrings + signed-by)
# ===============================================================
if [ "$METHOD" = "modern" ]; then

    KEYRING_DIR="/etc/apt/keyrings"
    KEYRING_FILE="${KEYRING_DIR}/textlib.gpg"

    if $MIRROR_MODE; then
        DEB_LINE_MODERN="deb [signed-by=${KEYRING_FILE}] ${MIRROR_URL} V2 main"
    else
        DEB_LINE_MODERN="deb [signed-by=${KEYRING_FILE}] ${REPO_URL_HTTPS} V2 main"
    fi

    # Kulcs ellenőrzés
    if [ -f "$KEYRING_FILE" ]; then
        echo " [OK] GPG keyring fájl már létezik: ${KEYRING_FILE}"
        ALREADY_KEY=true
    else
        ALREADY_KEY=false
    fi

    # Forrás ellenőrzés
    if sources_has_textlib; then
        echo " [OK] A repo sor már szerepel: ${SOURCES_FILE}"
        ALREADY_SOURCE=true
    else
        ALREADY_SOURCE=false
    fi

    if $ALREADY_KEY && $ALREADY_SOURCE; then
        echo ""
        echo " Minden már be van állítva, nincs teendő."
        echo "============================================="
        exit 0
    fi

    # GPG kulcs letöltése (mindig textlib.hu-ról, mirror módban is)
    if ! $ALREADY_KEY; then
        if [ ! -d "$KEYRING_DIR" ]; then
            echo " [*] Könyvtár létrehozása: ${KEYRING_DIR}"
            mkdir -p "$KEYRING_DIR"
            echo " [OK] Könyvtár létrehozva."
        fi
        echo " [*] Dearmored GPG kulcs letöltése: ${DEARMOR_URL}"
        if wget -q --no-check-certificate -O "${KEYRING_FILE}" "${DEARMOR_URL}"; then
            chmod 644 "${KEYRING_FILE}"
            echo " [OK] GPG kulcs elmentve: ${KEYRING_FILE} (jogosultság: 644)"
        else
            echo " HIBA: Nem sikerült a GPG kulcsot letölteni!"
            rm -f "${KEYRING_FILE}"
            exit 1
        fi
    fi

    # Forrás sor hozzáfűzése
    if ! $ALREADY_SOURCE; then
        echo " [*] Sor hozzáfűzése: ${SOURCES_FILE}"
        echo "" >> "$SOURCES_FILE"
        echo "# textlib.hu Debian repository (hozzáadva: $(date '+%Y-%m-%d'))" >> "$SOURCES_FILE"
        echo "${DEB_LINE_MODERN}" >> "$SOURCES_FILE"
        echo " [OK] Hozzáfűzve: ${DEB_LINE_MODERN}"
    fi

fi

# ===============================================================
# Befejezés
# ===============================================================
echo "---------------------------------------------"
echo " A beállítás kész. Futtassa a következő parancsot:"
echo ""
echo "   sudo apt-get update"
echo ""
echo "============================================="
