#!/bin/bash
# Setup GPG key with all email identities
# Usage: gpg-setup

set -e

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

# Configuration
PRIMARY_NAME="Ray Andrew Sinurat"
PRIMARY_EMAIL="raydreww@gmail.com"

# Additional UIDs to add (name|email)
ADDITIONAL_UIDS=(
    "Ray Andrew Sinurat|rayandrew@uchicago.edu"
    "Ray Andrew|raydreww@gmail.com"
    "Ray Andrew|rayandrew@uchicago.edu"
    "Ray A. O. Sinurat|raydreww@gmail.com"
    "Ray A. O. Sinurat|rayandrew@uchicago.edu"
    "Ray Andrew Obaja Sinurat|raydreww@gmail.com"
    "Ray Andrew Obaja Sinurat|rayandrew@uchicago.edu"
)

# Check if key already exists
if gpg --list-secret-keys "$PRIMARY_EMAIL" &>/dev/null; then
    echo "GPG key for $PRIMARY_EMAIL already exists."
    echo ""
    gpg --list-secret-keys --keyid-format LONG "$PRIMARY_EMAIL"
    echo ""
    read -p "Do you want to add missing UIDs to this key? [y/N] " -n 1 -r
    echo
    if [[ ! $REPLY =~ ^[Yy]$ ]]; then
        exit 0
    fi
else
    echo "Creating new GPG key for $PRIMARY_NAME <$PRIMARY_EMAIL>"
    echo ""
    echo "You will be prompted for a passphrase."
    echo ""

    gpg --full-generate-key --batch <<EOF
Key-Type: RSA
Key-Length: 4096
Subkey-Type: RSA
Subkey-Length: 4096
Name-Real: $PRIMARY_NAME
Name-Email: $PRIMARY_EMAIL
Expire-Date: 2y
%ask-passphrase
%commit
EOF

    echo ""
    echo "Primary key created!"
fi

# Get key ID
KEY_ID=$(gpg --list-secret-keys --keyid-format LONG "$PRIMARY_EMAIL" 2>/dev/null | grep '^sec' | head -1 | sed 's/.*\/\([A-F0-9]*\) .*/\1/')

if [[ -z $KEY_ID ]]; then
    echo "Error: Could not find key ID"
    exit 1
fi

echo ""
echo "Key ID: $KEY_ID"
echo ""
echo "Adding additional UIDs..."

# Get existing UIDs
EXISTING_UIDS=$(gpg --list-keys "$KEY_ID" 2>/dev/null | grep '^uid' | sed 's/.*] //')

for uid in "${ADDITIONAL_UIDS[@]}"; do
    NAME="${uid%|*}"
    EMAIL="${uid#*|}"
    UID_STRING="$NAME <$EMAIL>"

    if echo "$EXISTING_UIDS" | grep -qF "$UID_STRING"; then
        echo "  [skip] $UID_STRING (already exists)"
    else
        echo "  [add]  $UID_STRING"
        "$SCRIPT_DIR/gpg-add-uid" "$NAME" "$EMAIL" "$KEY_ID" 2>/dev/null || true
    fi
done

echo ""
echo "Done! Final key:"
echo ""
gpg --list-keys --keyid-format LONG "$KEY_ID"

echo ""
echo "Update your neomutt config with:"
echo "  set pgp_sign_as = 0x$KEY_ID"
