#!/bin/sh
# Локальный WebDAV для синхронизации Joplin (Mac ↔ телефон по LAN).
# Данные: ~/JoplinSync. Учётка: ~/.config/joplin-webdav/env
#
#   ./joplin-webdav-serve.sh              # фон
#   ./joplin-webdav-serve.sh --foreground # передний план (для launchd)

set -e

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

mkdir -p "$LOG_DIR" "$(dirname "$PID_FILE")"

if [ ! -f "$CONFIG" ]; then
  echo "Нет $CONFIG — запустите: $SCRIPT_DIR/joplin-webdav-install.sh" >&2
  exit 1
fi

# shellcheck disable=SC1090
. "$CONFIG"

: "${JOPLIN_WEBDAV_USER:?}"
: "${JOPLIN_WEBDAV_PASS:?}"
: "${JOPLIN_WEBDAV_PORT:=8080}"
: "${JOPLIN_WEBDAV_ROOT:=$HOME/JoplinSync}"

mkdir -p "$JOPLIN_WEBDAV_ROOT"

RCLONE="$(command -v rclone || echo /opt/homebrew/bin/rclone)"
if [ ! -x "$RCLONE" ]; then
  echo "rclone не найден. Установите: brew install rclone" >&2
  exit 1
fi

run_rclone() {
  exec "$RCLONE" serve webdav "$JOPLIN_WEBDAV_ROOT" \
    --addr "0.0.0.0:${JOPLIN_WEBDAV_PORT}" \
    --user "$JOPLIN_WEBDAV_USER" \
    --pass "$JOPLIN_WEBDAV_PASS" \
    --vfs-cache-mode minimal \
    --log-file "$LOG_DIR/rclone.log" \
    --log-level INFO
}

case "${1:-}" in
  --foreground|-f)
    run_rclone
    ;;
  *)
    if [ -f "$PID_FILE" ]; then
      old_pid=$(cat "$PID_FILE")
      if kill -0 "$old_pid" 2>/dev/null; then
        echo "Уже запущен (PID $old_pid), порт ${JOPLIN_WEBDAV_PORT}"
        exit 0
      fi
      rm -f "$PID_FILE"
    fi
    nohup "$0" --foreground >>"$LOG_DIR/stdout.log" 2>&1 &
    echo $! >"$PID_FILE"
    sleep 1
    if kill -0 "$(cat "$PID_FILE")" 2>/dev/null; then
      echo "WebDAV запущен (PID $(cat "$PID_FILE")), порт ${JOPLIN_WEBDAV_PORT}"
    else
      echo "Не удалось запустить. См. $LOG_DIR/stdout.log" >&2
      rm -f "$PID_FILE"
      exit 1
    fi
    ;;
esac
