#!/usr/bin/env bash
set -euo pipefail

echo "inside qbittorrent/hooks/post-start"

# Этот скрипт делает 2 основные вещи:
# 1. Устанавливает пароль по умолчанию 'adminadmin', если он еще не установлен. Это сделано для того, чтобы пользователи могли получить доступ к qBittorrent после установки без необходимости доступа к журналам контейнера qBittorrent для получения временного пароля, который будет сброшен при перезапуске.
# 2. Включает опцию AuthSubnetWhitelist и устанавливает для AuthSubnetWhitelist подсеть сети Docker DFWEBOS_main_network. Это сделано для того, чтобы мы могли автоматически настраивать другие приложения, такие как Radarr/Sonarr/etc..

# Мы используем файл HAS_BEEN_CONFIGURED, чтобы указать, что мы уже настроили qBittorrent. Таким образом, пользователи смогут изменять файл qBittorrent.conf без его перезаписи нашим сценарием.

APP_DATA_DIR="$(readlink -f "$(dirname "${BASH_SOURCE[0]}")/..")"
QBITTORRENT_CONF_FILE="${APP_DATA_DIR}/data/config/config/qBittorrent.conf"
DFWEBOS_QBITTORRENT_CONFIG_FLAG="${APP_DATA_DIR}/HAS_BEEN_CONFIGURED_BY_DFWEBOS"

if [[ -f "${DFWEBOS_QBITTORRENT_CONFIG_FLAG}" ]]; then
  echo "qBittorrent has already been configured."
  exit
fi

# Подождите до 30 секунд, пока файл qBittorrent.conf появится.
echo "Waiting up to 30 seconds for qBittorrent.conf file to exist..."
for attempt in $(seq 1 300); do
	if [[ -f "${QBITTORRENT_CONF_FILE}" ]]; then
		echo "qBittorrent.conf file exists"
		break
	fi
	sleep 0.1
done

if [[ ! -f "${QBITTORRENT_CONF_FILE}" ]]; then
  echo "qBittorrent.conf was never created. Something is likely wrong with the qBittorrent app."
  exit
fi

# подождите 5 секунд, чтобы убедиться, что файл полностью записан службой qBittorrent.
echo "Waiting 5 seconds for qBittorrent.conf file to be fully written..."
sleep 5

ensure_preferences_section() {
	if ! grep --quiet '^\[Preferences\]$' "${QBITTORRENT_CONF_FILE}"; then
		echo "[Preferences] section does not exist in qBittorrent.conf. Creating it."
		printf '\n[Preferences]\n' >> "${QBITTORRENT_CONF_FILE}"
	fi
}

if "${DFWEBOS_ROOT}/scripts/app" compose "${APP_ID}" stop server; then
  echo "qBittorrent stopped successfully."
else
  echo "Failed to run stop command because we were sent here from the post-start hook. This is expected behavior. Continuing"
fi

ensure_preferences_section

# Начиная с версии 4.6.1, qBittorrent больше не поддерживает пароль по умолчанию и вместо этого печатает в журналах временный пароль, что не идеально для пользователей.
# Пользователи должны запустить qBittorrent, скопировать временный пароль из журналов контейнера, войти в систему с временным паролем, а затем установить новый пароль из интерфейс.
# Этот сценарий установит в качестве пароля по умолчанию устаревший пароль 'adminadmin', если пароль еще не установлен. Если пользователь уже установил пароль, этот сценарий не будет его перезаписывать.
# Описание приложения в магазине приложений DFWebOS призывает пользователей сменить пароль по умолчанию.

# Если строка с `WebUI\Password_PBKDF2` еще не существует в qBittorrent.conf, значит собственный пароль еще не установлен и мы прописываем `adminadmin` в качестве пароля по умолчанию.
# Ожидается, что эта строка будет находиться в разделе [Настройки].
# Сначала мы проверяем эту строку, потому что у пользователя может быть устаревшая установка до того, как qBittorrent удалил пароль по умолчанию.
if ! grep --quiet '^WebUI\\Password_PBKDF2' "${QBITTORRENT_CONF_FILE}"; then
  echo "WebUI\\Password_PBKDF2 does not exist in qBittorrent.conf. Adding default password."

  echo "Writing default password adminadmin to qBittorrent.conf"
  sed -i '/^\[Preferences\]/a WebUI\\Password_PBKDF2="@ByteArray(gTzqQHUv3A1X43tLaAhaJQ==:ZBCIBA4honNZ7H66xdEoHpqBC/Vvwj17ZCjQKARSK78ScJWDMdWSfxezHG536UekAL/zpRn571MXCfhtdqiArA==)"' "${QBITTORRENT_CONF_FILE}"

else
  # Это устаревшая установка, и пользователь уже установил пароль. Мы не хотим его перезаписывать.
  echo "'WebUI\\Password_PBKDF2' already exists in qBittorrent.conf. No changes made."
fi

# Пользователи могут перезаписать эти настройки в файле qBittorrent.conf, если хотят их изменить, и этот сценарий не перезапишет их.

# Убедитесь, что WebUI\AuthSubnetWhitelist установлен правильно.
echo "Setting AuthSubnetWhitelist=10.21.0.0/16 in qBittorrent.conf"
if grep -q '^WebUI\\AuthSubnetWhitelist=' "${QBITTORRENT_CONF_FILE}"; then
  sed -i 's/^WebUI\\AuthSubnetWhitelist=.*/WebUI\\AuthSubnetWhitelist=10.21.0.0\/16/' "${QBITTORRENT_CONF_FILE}"
else
  sed -i '/^\[Preferences\]/a WebUI\\AuthSubnetWhitelist=10.21.0.0/16' "${QBITTORRENT_CONF_FILE}"
fi

# Убедитесь, что WebUI\AuthSubnetWhitelistEnabled установлен правильно.
echo "Setting WebUI\AuthSubnetWhitelistEnabled=true in qBittorrent.conf"
if grep -q '^WebUI\\AuthSubnetWhitelistEnabled=' "${QBITTORRENT_CONF_FILE}"; then
  sed -i 's/^WebUI\\AuthSubnetWhitelistEnabled=.*/WebUI\\AuthSubnetWhitelistEnabled=true/' "${QBITTORRENT_CONF_FILE}"
else
  sed -i '/^\[Preferences\]/a WebUI\\AuthSubnetWhitelistEnabled=true' "${QBITTORRENT_CONF_FILE}"
fi

# Убедитесь, что WebUI\HostHeaderValidation установлен правильно.
echo "Setting WebUI\HostHeaderValidation=false in qBittorrent.conf"
if grep -q '^WebUI\\HostHeaderValidation=' "${QBITTORRENT_CONF_FILE}"; then
  sed -i 's/^WebUI\\HostHeaderValidation=.*/WebUI\\HostHeaderValidation=false/' "${QBITTORRENT_CONF_FILE}"
else
  sed -i '/^\[Preferences\]/a WebUI\\HostHeaderValidation=false' "${QBITTORRENT_CONF_FILE}"
fi

# Создайте файл DFWEBOS_QBITTORRENT_CONFIG_FLAG, чтобы указать, что мы настроили qBittorrent.
touch "${DFWEBOS_QBITTORRENT_CONFIG_FLAG}"

# запустить службу qBittorrent
echo "Starting qBittorrent..."
"${DFWEBOS_ROOT}/scripts/app" compose "${APP_ID}" start server

# Перезапустите приложения *arr, чтобы запустить автоматическую настройку.
apps=("radarr" "sonarr" "lidarr" "readarr" "prowlarr")
installed_apps=$("${DFWEBOS_ROOT}/scripts/app" ls-installed)

for app in "${apps[@]}"; do
  if echo "$installed_apps" | grep --quiet "$app"; then
    # Мы не блокируем скрипт при перезапуске приложений, поскольку хотим перезапускать все приложения параллельно.
    # AND нам нужно, чтобы qBittorrent отображался в списке установленных приложений при перезапуске приложений.
    "${DFWEBOS_ROOT}/scripts/app" restart "$app" &
  fi
done
