#!/usr/bin/env bash
# pornpkg - Wrapper to run the holy porn package manager
# Usage: pornpkg <command> [args]

# Resolve holy porn interpreter + pornpkg source across both the
# installed pornOS layout and the in-tree dev layout.
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"

find_hp() {
  # installed pornOS layout (relative - works from /usr/bin or any prefix)
  [ -f "${SCRIPT_DIR}/../lib/holyporn/holyporn.py" ] && { echo "${SCRIPT_DIR}/../lib/holyporn/holyporn.py"; return; }
  # absolute installed layout
  [ -f /usr/lib/holyporn/holyporn.py ] && { echo /usr/lib/holyporn/holyporn.py; return; }
  # dev layout (repo/src)
  [ -f "${SCRIPT_DIR}/../holyporn/holyporn.py" ] && { echo "${SCRIPT_DIR}/../holyporn/holyporn.py"; return; }
  [ -f "${SCRIPT_DIR}/holyporn/holyporn.py" ] && { echo "${SCRIPT_DIR}/holyporn/holyporn.py"; return; }
  echo "NOT_FOUND"
}

find_pkg() {
  [ -f "${SCRIPT_DIR}/../lib/pornpkg/pornpkg.hp" ] && { echo "${SCRIPT_DIR}/../lib/pornpkg/pornpkg.hp"; return; }
  [ -f /usr/lib/pornpkg/pornpkg.hp ] && { echo /usr/lib/pornpkg/pornpkg.hp; return; }
  [ -f "${SCRIPT_DIR}/pornpkg.hp" ] && { echo "${SCRIPT_DIR}/pornpkg.hp"; return; }
  [ -f "${SCRIPT_DIR}/../pornpkg/pornpkg.hp" ] && { echo "${SCRIPT_DIR}/../pornpkg/pornpkg.hp"; return; }
  echo "NOT_FOUND"
}

HP="$(find_hp)"
PKG_HP="$(find_pkg)"

if [ "$HP" = "NOT_FOUND" ]; then
    echo "FATAL: holy porn interpreter not found"
    echo "did you fuck up the installation?"
    exit 1
fi

if [ "$PKG_HP" = "NOT_FOUND" ]; then
    echo "FATAL: pornpkg source not found"
    exit 1
fi

# pass command line args through stdin to the holy porn VM
CMD="${1:-help}"
ARGS="${*:2}"

printf '%s\n%s\n' "$CMD" "$ARGS" | python3 "$HP" "$PKG_HP"
