#!/bin/sh
CONFIG="${JOPLIN_WEBDAV_CONFIG:-$HOME/.config/joplin-webdav/env}"
PID_FILE="$HOME/.config/joplin-webdav/rclone.pid"
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname "$0")" && pwd)

echo "=== WebDAV Joplin ==="
if [ -f "$CONFIG" ]; then
  # shellcheck disable=SC1090
  . "$CONFIG"
  echo "Пользователь: ${JOPLIN_WEBDAV_USER:-?}"
  echo "Порт:         ${JOPLIN_WEBDAV_PORT:-8080}"
  echo "Папка:        ${JOPLIN_WEBDAV_ROOT:-$HOME/JoplinSync}"
else
  echo "Конфиг не найден: $CONFIG"
fi

echo ""
echo "=== Процесс ==="
if pgrep -f "rclone serve webdav" >/dev/null 2>&1; then
  pgrep -lf "rclone serve webdav" 2>/dev/null || true
else
  echo "Не запущен → ./docs/apps/joplin/scripts/joplin-webdav-serve.sh"
fi

port="${JOPLIN_WEBDAV_PORT:-8080}"

echo ""
echo "=== URL для телефона (Android-хотспот) ==="
if [ -x "$SCRIPT_DIR/joplin-hotspot-alias.sh" ]; then
  "$SCRIPT_DIR/joplin-hotspot-alias.sh" status
else
  echo "(нет joplin-hotspot-alias.sh)"
fi

echo ""
echo "=== mDNS (.local) — с телефона НЕ работает ==="
if [ -x "$SCRIPT_DIR/joplin-mdns-setup.sh" ]; then
  host="$(scutil --get LocalHostName 2>/dev/null | tr '[:upper:]' '[:lower:]' || echo '?')"
  echo "http://${host}.local:${port} — только Mac/Windows; Android-хотспот не резолвит"
fi

echo ""
echo "=== IP Mac (DHCP, справочно) ==="
ip=$(ipconfig getifaddr en0 2>/dev/null || true)
[ -n "$ip" ] && echo "primary en0: $ip" || echo "нет IP"

echo ""
echo "=== Порт :8080 ==="
lsof -nP -iTCP:"$port" -sTCP:LISTEN 2>/dev/null || echo "не слушает"

echo ""
echo "=== URL в Joplin (Mac) ==="
settings="$HOME/.config/joplin-desktop/settings.json"
if [ -f "$settings" ]; then
  grep -o '"sync\.6\.path": *"[^"]*"' "$settings" 2>/dev/null | sed 's/.*"\(http[^"]*\)".*/\1/' \
    | while read -r u; do echo "settings.json: $u"; done
fi

log="$HOME/Library/Logs/joplin-webdav/rclone.log"

echo ""
echo "=== Сеть: Mac и телефон в одной LAN? ==="
gw=$(route -n get default 2>/dev/null | awk '/gateway:/{print $2; exit}')
ip=$(ipconfig getifaddr en0 2>/dev/null || true)
case "$gw" in
  192.168.1.*|192.168.0.*)
    peers=$(arp -an 2>/dev/null | grep "$gw" | awk '{print $2}' | tr -d '()' | grep -vE "^${gw%.*}\.(1|255)$|^$ip$" | head -3)
    if [ -z "$peers" ]; then
      echo "⚠ Mac на домашнем Wi‑Fi ($ip), других устройств в LAN не видно"
      echo "  Телефон, скорее всего, НЕ в этой Wi‑Fi → синк невозможен"
      echo "  Вариант A: Mac подключить к хотспоту телефона"
      echo "  Вариант B: телефон подключить к той же Wi‑Fi, что Mac"
    else
      echo "Mac на Wi‑Fi роутера ($ip). Телефон должен быть в той же Wi‑Fi."
    fi
    ;;
  10.*|172.20.10.*|192.168.43.*|192.168.44.*)
    echo "Mac на хотспоте ($ip). URL на телефоне — из блока выше (*.100)."
    if [ -n "$gw" ] && [ -f "$log" ] && ! grep -q "from ${gw}:" "$log" 2>/dev/null; then
      echo "⚠ В логе rclone ещё не было запросов с телефона ($gw)"
      echo "  Проверьте URL в браузере НА ТЕЛЕФОНЕ (не только в Joplin)"
    fi
    ;;
  *)
    [ -n "$gw" ] && echo "gateway: $gw, Mac: ${ip:-?}"
    ;;
esac

echo ""
echo "=== rclone (запросы с телефона?) ==="
gw=$(route -n get default 2>/dev/null | awk '/gateway:/{print $2; exit}')
if [ -f "$log" ]; then
  phone_lines=$(grep -E 'from 10\.|from 192\.168\.' "$log" 2>/dev/null | grep -v '127.0.0.1' | tail -5)
  if [ -n "$gw" ] && grep -q "from ${gw}:" "$log" 2>/dev/null; then
    echo "OK: в логе есть запросы с телефона/шлюза ($gw)"
    grep "from ${gw}:" "$log" 2>/dev/null | tail -2
  elif [ -n "$phone_lines" ]; then
    echo "$phone_lines"
    echo "⚠ нет запросов с шлюза ${gw:-?} — возможно только тесты с Mac"
  else
    echo "нет запросов с LAN — телефон не достучался до rclone"
  fi
  echo ""
  echo "Смотреть live: tail -f $log | grep -v 127.0.0.1"
fi

echo ""
echo "=== Учётка ==="
[ -f "$CONFIG" ] && echo "Пароль: $CONFIG → JOPLIN_WEBDAV_PASS"
