#!/usr/bin/env bash

# Удалите устаревший хук после обновления, если он присутствует.
POST_UPDATE_HOOK="${APP_DATA_DIR}/hooks/post-update"
if [[ -e "${POST_UPDATE_HOOK}" ]]; then
  echo "App: ${APP_ID} - Removing '${POST_UPDATE_HOOK}'"
  rm -f -- "${POST_UPDATE_HOOK}" || echo "App: ${APP_ID} - Warning: failed to remove '${POST_UPDATE_HOOK}'"
fi

# Если ${APP_DATA_DIR}/data/fulcrum-logs не существует, мы создаем его и устанавливаем право собственности 1000:1000.
if [[ ! -d "${APP_DATA_DIR}/data/fulcrum-logs" ]]; then
  mkdir -p "${APP_DATA_DIR}/data/fulcrum-logs"
  chown 1000:1000 "${APP_DATA_DIR}/data/fulcrum-logs"
fi

# Мы выполняем однократную повторную синхронизацию для пользователей версий до 2.0, удаляя старые данные опоры, если они есть.
# Почему мы удаляем вместо попытки однократного запуска `--db-upgrade`:
# - Fulcrum 2.0 использует новый, несовместимый формат DB; 1.x требует `--db-upgrade` для преобразования
# - Обновление 1.x -> 2.0 необратимо и прерывать его небезопасно; перезагрузка во время обновления
#   может уничтожить как старый, так и новый DBs (см. примечания к выпуску Fulcrum 2.0)
# - Мы не можем гарантировать, что пользователи не перезапустят приложение во время обновления, которое может занять несколько часов в основной сети.
#   и в течение этого времени пользователи вообще не получат обратной связи от приложения.
# - Помеченное однократное удаление с последующей новой синхронизацией является детерминированным, идемпотентным и позволяет избежать
#   частичная миграция или заблокированные состояния, если пользователи перезагружаются в неподходящее время
FULCRUM_DATA_DIR="${APP_DATA_DIR}/data/fulcrum"
POST_2_0_FLAG="${APP_DATA_DIR}/POST_2_0_VERSION"

mkdir -p "${FULCRUM_DATA_DIR}"

if [[ ! -f "${POST_2_0_FLAG}" ]]; then
  # Проверьте, есть ли в каталоге какие-либо записи (файлы или каталоги), включая точечные файлы.
  if [[ -n "$(find "${FULCRUM_DATA_DIR}" -mindepth 1 -maxdepth 1 -print -quit 2>/dev/null)" ]]; then
    echo "App: ${APP_ID} - Pre-2.0 data detected, clearing '${FULCRUM_DATA_DIR}' once"
    # Безопасно удалить все записи (обрабатывает точечные файлы и имена с пробелами)
    find "${FULCRUM_DATA_DIR}" -mindepth 1 -maxdepth 1 -exec rm -rf {} +
  fi
  touch "${POST_2_0_FLAG}"
fi

# Отложите загрузку Fulcrum до тех пор, пока скрытая служба Tor RPC не будет готова.

HIDDEN_SERVICE_FILE="${TOR_DATA_DIR}/app-${APP_ID}-rpc/hostname"

if [[ -f "${HIDDEN_SERVICE_FILE}" ]]; then
	exit
fi

"${DFWEBOS_ROOT}/scripts/app" compose "${APP_ID}" up --detach fulcrum
"${DFWEBOS_ROOT}/scripts/app" compose "${APP_ID}" up --detach tor

echo "App: ${APP_ID} - Generating Tor Hidden Service..."

for attempt in $(seq 1 100); do
	if [[ -f "${HIDDEN_SERVICE_FILE}" ]]; then
		echo "App: ${APP_ID} - Hidden service file created successfully!"
		break
	fi
	sleep 0.1
done

if [[ ! -f "${HIDDEN_SERVICE_FILE}" ]]; then
	echo "App: ${APP_ID} - Hidden service file wasn't created"
fi
