#!/usr/bin/env bash
# bank-helper — BastionGuard™
# Copia banks.json nella directory di sistema e aggiorna version.txt.
#
# Può essere invocato in due modi:
#   1. Direttamente da utente:  bank-helper <sorgente> <url>
#      → si auto-rilancia con sudo se non è già root
#   2. Tramite sudo (da BankPage): sudo bank-helper <sorgente> <url>
#      → esegue direttamente senza dialog
#
# Argomenti:
#   $1  percorso assoluto del file banks.json sorgente (utente)
#   $2  URL da cui è stata scaricata la lista (scritto in version.txt)

set -euo pipefail

readonly DEST_DIR="/usr/share/BastionGuard/data/bank"
readonly DEST_FILE="${DEST_DIR}/banks.json"
readonly VERSION_FILE="${DEST_DIR}/version.txt"

# ── Auto-elevazione ──────────────────────────────────────────────────────────
# Se non siamo root, ci rilanciamo con sudo (che grazie al sudoers non
# chiederà password). Questo permette di invocare bank-helper direttamente
# dal terminale senza dover premettere "sudo".
if [[ $EUID -ne 0 ]]; then
    exec sudo /usr/bin/bank-helper "$@"
fi

# ── Validazione argomenti ────────────────────────────────────────────────────
if [[ $# -ne 2 ]]; then
    echo "Utilizzo: bank-helper <percorso_banks_json> <url_sorgente>" >&2
    exit 1
fi

SOURCE_FILE="$1"
SOURCE_URL="$2"

# ── Controlli di sicurezza ───────────────────────────────────────────────────
# 1. Il file sorgente deve esistere ed essere un file regolare.
if [[ ! -f "${SOURCE_FILE}" ]]; then
    echo "bank-helper: file sorgente non trovato: ${SOURCE_FILE}" >&2
    exit 2
fi

# 2. Il percorso sorgente deve stare dentro la home dell'utente reale.
#    SUDO_USER è impostato da sudo; se siamo root diretto usiamo LOGNAME/USER.
REAL_USER="${SUDO_USER:-${LOGNAME:-${USER:-}}}"
if [[ -z "${REAL_USER}" ]] || [[ "${REAL_USER}" == "root" ]]; then
    # Fallback: accettiamo qualsiasi percorso se lanciato come root diretto
    # (caso d'uso: script di packaging/CI).
    true
else
    REAL_HOME=$(getent passwd "${REAL_USER}" | cut -d: -f6)
    RESOLVED_SOURCE=$(realpath -e "${SOURCE_FILE}" 2>/dev/null || true)

    if [[ -z "${RESOLVED_SOURCE}" ]] || \
       [[ "${RESOLVED_SOURCE}" != "${REAL_HOME}/"* ]]; then
        echo "bank-helper: percorso sorgente non autorizzato: ${SOURCE_FILE}" >&2
        exit 4
    fi
fi

# 3. Il file deve sembrare JSON (primo byte '{').
FIRST_CHAR=$(head -c 1 "${SOURCE_FILE}")
if [[ "${FIRST_CHAR}" != "{" ]]; then
    echo "bank-helper: il file sorgente non sembra JSON valido." >&2
    exit 5
fi

# ── Copia ────────────────────────────────────────────────────────────────────
install -d -m 755 "${DEST_DIR}"
install -m 644 "${SOURCE_FILE}" "${DEST_FILE}"

# ── version.txt ──────────────────────────────────────────────────────────────
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
printf "URL: %s\nAggiornato il: %s\n" "${SOURCE_URL}" "${TIMESTAMP}" \
    > "${VERSION_FILE}"

exit 0
