#!/usr/bin/env bash
# Verschluesselt .env.local fuer alle Recipients aus .age-recipients.
# Voraussetzung: age CLI installiert (https://github.com/FiloSottile/age).
#
# Nutzung:
#   ./env-encrypt.sh            # verschluesselt .env.local -> .env.local.age
#   ./env-encrypt.sh <datei>    # verschluesselt beliebige Datei -> <datei>.age
#
# Neue Recipients: Pubkey in .age-recipients eintragen, dann dieses Skript
# erneut ausfuehren, damit die Datei fuer alle aktuellen Recipients neu
# verschluesselt wird.

set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
RECIPIENTS_FILE="${SCRIPT_DIR}/.age-recipients"
SOURCE_FILE="${1:-${SCRIPT_DIR}/.env.local}"
TARGET_FILE="${SOURCE_FILE}.age"

if ! command -v age >/dev/null 2>&1; then
  echo "Fehler: age CLI nicht gefunden. Installation: https://github.com/FiloSottile/age" >&2
  exit 1
fi

if [[ ! -f "${RECIPIENTS_FILE}" ]]; then
  echo "Fehler: ${RECIPIENTS_FILE} nicht gefunden." >&2
  exit 1
fi

if [[ ! -f "${SOURCE_FILE}" ]]; then
  echo "Fehler: ${SOURCE_FILE} nicht gefunden." >&2
  exit 1
fi

RECIPIENT_ARGS=()
RECIPIENT_COUNT=0
while IFS= read -r line; do
  line="$(echo "${line}" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')"
  [[ -z "${line}" || "${line}" == \#* ]] && continue
  # Zeile: "ssh-ed25519 <base64-key> <kommentar>" -> nur Typ+Key als Pubkey verwenden
  pubkey="$(echo "${line}" | awk '{print $1, $2}')"
  RECIPIENT_ARGS+=(-r "${pubkey}")
  RECIPIENT_COUNT=$((RECIPIENT_COUNT + 1))
done < "${RECIPIENTS_FILE}"

if [[ ${RECIPIENT_COUNT} -eq 0 ]]; then
  echo "Fehler: keine aktiven Recipients in ${RECIPIENTS_FILE} gefunden." >&2
  exit 1
fi

age -e "${RECIPIENT_ARGS[@]}" -o "${TARGET_FILE}" "${SOURCE_FILE}"
echo "Verschluesselt: ${TARGET_FILE} (${RECIPIENT_COUNT} Recipients)"
