#!/bin/bash
# Backup GPG key (both private and public) to a directory
# Usage: gpg-backup-key [output-dir] [key-id or email]

set -e

OUTPUT_DIR="${1:-$HOME}"
KEY_ID="${2:-}"

# If no key specified, use first secret key
if [[ -z $KEY_ID ]]; then
    KEY_ID=$(gpg --list-secret-keys --keyid-format LONG 2>/dev/null | grep '^sec' | head -1 | sed 's/.*\/\([A-F0-9]*\) .*/\1/')
fi

if [[ -z $KEY_ID ]]; then
    echo "Error: No GPG key found"
    exit 1
fi

# Create output directory if needed
mkdir -p "$OUTPUT_DIR"

PRIVATE_KEY="$OUTPUT_DIR/gpg-private-key-$KEY_ID.asc"
PUBLIC_KEY="$OUTPUT_DIR/gpg-public-key-$KEY_ID.asc"

echo "Backing up GPG key $KEY_ID"
echo ""

echo "Exporting private key to $PRIVATE_KEY..."
gpg --armor --export-secret-keys "$KEY_ID" >"$PRIVATE_KEY"
chmod 600 "$PRIVATE_KEY"

echo "Exporting public key to $PUBLIC_KEY..."
gpg --armor --export "$KEY_ID" >"$PUBLIC_KEY"

echo ""
echo "Backup complete!"
echo "  Private key: $PRIVATE_KEY"
echo "  Public key:  $PUBLIC_KEY"
echo ""
echo "WARNING: Keep your private key safe and never share it!"
echo ""
echo "To restore, run:"
echo "  gpg-restore-key $PRIVATE_KEY"
