#!/bin/bash

REPO_PATH="$1"
HOST_ALIAS=${2:-""}      # optional, defaults to domain in remote URL
PROFILE_ALIAS=${3:-"$USER"}
PASSPHRASE=${4:-""}

[ -z "$REPO_PATH" ] && { echo "Usage: $0 /path/to/repo"; exit 1; }

cd "$REPO_PATH" || exit 1

KEY_PATH="$HOME/.ssh/$(basename "$REPO_PATH")_id_ed25519"
ssh-keygen -t ed25519 -f "$KEY_PATH" -C "$(basename "$REPO_PATH")" -N "$PASSPHRASE"

eval "$(ssh-agent -s)"
ssh-add "$KEY_PATH"

REMOTE_URL=$(git remote get-url origin)

# Extract domain from remote URL
if [[ "$REMOTE_URL" =~ ([^/:]+(:[0-9]+)?)[/:].* ]]; then
    DOMAIN="${BASH_REMATCH[1]}"
else
    echo "Could not parse remote domain. Please update manually."
    exit 1
fi

# Use provided host alias if given
HOST_TO_USE=${HOST_ALIAS:-$DOMAIN}

REPO_NAME=$(basename "$REPO_PATH")
git remote set-url origin git@$HOST_TO_USE:$PROFILE_ALIAS/$REPO_NAME.git
echo "Remote URL updated to use SSH key for this repo."

cd -
exit 0

