#!/bin/sh
set -eu

SCRIPT_PATH=$0
case "$SCRIPT_PATH" in
  /*) ;;
  *) SCRIPT_PATH="$(pwd)/$SCRIPT_PATH" ;;
esac

# Follow symlinks so `/usr/local/bin/paseo` resolves back into the app bundle.
while [ -L "$SCRIPT_PATH" ]; do
  SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$SCRIPT_PATH")" && pwd)
  LINK_TARGET=$(readlink "$SCRIPT_PATH")
  case "$LINK_TARGET" in
    /*) SCRIPT_PATH="$LINK_TARGET" ;;
    *) SCRIPT_PATH="${SCRIPT_DIR}/${LINK_TARGET}" ;;
  esac
done

SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$SCRIPT_PATH")" && pwd)
RESOURCES_DIR=$(CDPATH= cd -- "${SCRIPT_DIR}/.." && pwd)

# macOS: MacOS/Paseo is a sibling of Resources/
# Linux: the executable sits next to resources/
if [ -x "${RESOURCES_DIR}/../MacOS/Paseo" ]; then
  APP_EXECUTABLE="${RESOURCES_DIR}/../MacOS/Paseo"
elif [ -x "${RESOURCES_DIR}/../Paseo" ]; then
  APP_EXECUTABLE="${RESOURCES_DIR}/../Paseo"
else
  echo "Bundled Paseo executable not found relative to ${RESOURCES_DIR}" >&2
  exit 1
fi

case "${1:-}" in
  ./*|../*|.|..|/*|~|~/*)
    case "$1" in
      ~) ARG_PATH="$HOME" ;;
      ~/*) ARG_PATH="$HOME/${1#\~/}" ;;
      *) ARG_PATH="$1" ;;
    esac
    if RESOLVED_PATH=$(CDPATH= cd -- "$ARG_PATH" 2>/dev/null && pwd); then
      :
    elif command -v realpath >/dev/null 2>&1; then
      RESOLVED_PATH=$(realpath "$ARG_PATH" 2>/dev/null || printf "%s" "$ARG_PATH")
    else
      RESOLVED_PATH=$ARG_PATH
    fi
    if [ ! -e "${RESOLVED_PATH}" ]; then
      echo "Path does not exist: ${RESOLVED_PATH}" >&2
      exit 1
    fi
    if [ ! -d "${RESOLVED_PATH}" ]; then
      echo "Not a directory: ${RESOLVED_PATH}" >&2
      exit 1
    fi
    exec "${APP_EXECUTABLE}" --open-project "${RESOLVED_PATH}"
    ;;
esac

exec env PASEO_DESKTOP_CLI=1 "${APP_EXECUTABLE}" "$@"
