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

# Этот скрипт делает 3 основные вещи:
# 1. Устанавливает каталоги загрузки и завершения по умолчанию на /downloads/incomplete и /downloads/complete соответственно.
# 2. Настраивает ini-файл, чтобы приложения *arr могли автоматически настраивать SABnzbd.
# 3. Перезапускает все установленные приложения *arr, чтобы можно было выполнить автоконфигурацию.

# Перед запуском мастера установки мы можем добавить категории по умолчанию в ini-файл приложения SABnzbd, не беспокоясь о сохранении пользовательских изменений.

# 1. Добавьте имя контейнера SABnzbd в host_whitelist в ini-файле приложения SABnzbd:
# host_whitelist = <все, что здесь установлено по умолчанию>, sabnzbd_web_1

# 2. Добавьте категории по умолчанию в INI-файл приложения SABnzbd для каждого приложения arr.

APP_DATA_DIR="$(readlink -f "$(dirname "${BASH_SOURCE[0]}")/..")"
SABNZBD_CONF_FILE="${APP_DATA_DIR}/data/config/sabnzbd.ini"

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

if [[ ! -f "${SABNZBD_CONF_FILE}" ]]; then
  echo "sabnzbd.ini was never created. Something is likely wrong with the SABnzbd app."
  exit
fi

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

# остановить службу SABnzbd
echo "Stopping SABnzbd..."
"${DFWEBOS_ROOT}/scripts/app" compose "${APP_ID}" stop web

# Перезаписать каталоги загрузки
echo "Overwriting download_dir and complete_dir in sabnzbd.ini"
sed -i 's/download_dir = Downloads\/incomplete/download_dir = \/downloads\/incomplete/' "${SABNZBD_CONF_FILE}"
sed -i 's/complete_dir = Downloads\/complete/complete_dir = \/downloads\/complete/' "${SABNZBD_CONF_FILE}"

# Добавьте имя контейнера SABnzbd в host_whitelist в ini-файле приложения SABnzbd.
echo "Adding SABnzbd container name to host_whitelist in sabnzbd.ini"
if grep -q '^host_whitelist =' "${SABNZBD_CONF_FILE}"; then
  sed -i 's/^host_whitelist = \(.*\)/host_whitelist = \1 sabnzbd_web_1,/' "${SABNZBD_CONF_FILE}"
else
  sed -i '/^\[misc\]/a host_whitelist = sabnzbd_web_1,' "${SABNZBD_CONF_FILE}"
fi

# Добавьте категории в ini-файл приложения SABnzbd.
# Мы делаем это, потому что приложения *arr требуют, чтобы точные имена категорий присутствовали в ini-файле приложения SABnzbd для автоматической настройки SABnzbd.

categories_content=$(cat << 'EOF'
[categories]
[[*]]
name = *
order = 0
pp = 3
script = None
dir =
newzbin =
priority = 0
[[movies]]
name = movies
order = 0
pp =
script = Default
dir = /downloads/movies
newzbin = movies
priority = 0
[[prowlarr-fallback]]
name = prowlarr-fallback
order = 0
pp =
script = Default
dir = /downloads
newzbin =
priority = -100
[[books]]
name = books
order = 0
pp =
script = Default
dir = /downloads/books
newzbin = books
priority = -100
[[shows]]
name = shows
order = 0
pp =
script = Default
dir = /downloads/shows
newzbin = shows
priority = 0
[[music]]
name = music
order = 0
pp =
script = Default
dir = /downloads/music
newzbin = music
priority = 0
EOF
)

# Добавьте категории в ini-файл
echo "$categories_content" >> "$SABNZBD_CONF_FILE"

echo "Appended [categories] section with subheaders to $SABNZBD_CONF_FILE"

# Запустите службу SABnzbd.
echo "Starting SABnzbd..."
"${DFWEBOS_ROOT}/scripts/app" compose "${APP_ID}" start web

# Перезапустите приложения *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 нам нужно, чтобы SABnzbd отображался в списке установленных приложений при перезапуске приложений.
    "${DFWEBOS_ROOT}/scripts/app" restart "$app" &
  fi
done