#!/bin/sh
# ghq get + resolve the on-disk clone path; prints the repo directory.
# Shell wrappers (fish/bash/zsh `ghg` functions) cd into the printed path —
# a child process can't change the caller's cwd.
repo=$1
if [ -z "$repo" ]; then
    echo "usage: ghg-clone <repo>" >&2
    exit 1
fi

# ghq natively understands https://, ssh://, git@host:…, and host/user/repo.
# Keep its output on stderr so stdout stays clean for the wrapper's cd.
ghq get "$repo" >&2 || exit

# Reduce the input to ghq's on-disk shape: <host>/<user>/<repo> —
# strip scheme (https://, ssh://, git://), user@ (git@github.com:…),
# turn scp host:path into host/path, drop trailing .git.
rel=$(printf '%s\n' "$repo" \
    | sed -E 's#^[[:alnum:]]+://##; s#^[^@/]+@##; s#:#/#; s#\.git$##')

# bare "user/repo" with no host → default to github.com
case "$rel" in
    *.*/*) ;;
    *) rel=github.com/$rel ;;
esac

dir=$(ghq root)/$rel
if [ ! -d "$dir" ]; then
    echo "ghg: expected clone at $dir but it does not exist" >&2
    exit 1
fi

command -v zoxide >/dev/null 2>&1 && zoxide add "$dir"
printf '%s\n' "$dir"
