#!/usr/bin/env bash

find_package_owner() {
  local mirror=$1 rel=$2
  shift 2
  local start="$mirror${rel:+/$rel}" candidate owner="" d arg

  package_owner_from_dir() {
    d=$1
    while :; do
      if [ -f "$d/pnpm-lock.yaml" ] || [ -f "$d/package-lock.json" ] || [ -f "$d/bun.lock" ] || [ -f "$d/bun.lockb" ] || [ -f "$d/composer.lock" ]; then
        printf '%s\n' "$d"
        return 0
      fi
      [ "$d" = "$mirror" ] && return 1
      d=$(dirname "$d")
      case "$d/" in "$mirror/"*) ;; *) return 1 ;; esac
    done
  }

  if owner=$(package_owner_from_dir "$start"); then
    printf '%s\n' "$owner"
    return 0
  fi

  # A compound argument (a `sh -c` script) names its paths as plain words, so
  # each whitespace token is a candidate too; a spaceless arg is its own token.
  local token
  for arg in "$@"; do
    for token in $arg; do
      case "$token" in
        /*) candidate=$token ;;
        *) candidate="$start/$token" ;;
      esac
      [ -e "$candidate" ] || continue
      [ -d "$candidate" ] || candidate=$(dirname "$candidate")
      if owner=$(package_owner_from_dir "$candidate"); then
        printf '%s\n' "$owner"
        return 0
      fi
    done
  done

  return 1
}
