#!/usr/bin/with-contenv bashio
# shellcheck shell=bash

rm -rf /etc/cont-init.d/20-config || true

declare CONFIG
declare incomplete_bool
declare download_dir
declare incomplete_dir
declare USER
declare PASS
declare WHITELIST
declare HOST_WHITELIST

CONFIGDIR="/config/transmission"

###############
# PERMISSIONS #
###############

#Default folders
echo "Updating folders"
mkdir -p /config/transmission || true
chown -R abc:abc /config/transmission || true

if ! bashio::fs.file_exists "$CONFIGDIR/settings.json"; then
  echo "Creating default config"
  cp "/defaults/settings.json" "$CONFIGDIR/settings.json"
fi

#################
# CONFIGURATION #
#################

# Alternate UI
##############

if bashio::config.has_value 'customUI'; then
  CUSTOMUI=$(bashio::config 'customUI')
  [ $CUSTOMUI != "standard" ] && sed -i "1a export TRANSMISSION_WEB_HOME=\"/$CUSTOMUI/\"" /etc/services.d/transmission/run

  # Enable transmission-web-control return to default UI
  if [ ! -f "/transmission-web-control/index.original.html" ]; then
    ln -s /usr/share/transmission/web/style /transmission-web-control
    ln -s /usr/share/transmission/web/images /transmission-web-control
    ln -s /usr/share/transmission/web/javascript /transmission-web-control
    ln -s /usr/share/transmission/web/index.html /transmission-web-control/index.original.html
  fi
fi
bashio::log.info "UI selected : $CUSTOMUI"

# INCOMPLETE DIR
################

echo "Creating config"
download_dir=$(bashio::config 'download_dir')
incomplete_dir=$(bashio::config 'incomplete_dir')
CONFIG=$(<$CONFIGDIR/settings.json)

# Permissions
echo "Updating permissions"
mkdir -p $download_dir
chown abc:abc $download_dir

# if incomplete dir > 2, to allow both null and '', set it as existing
if [ ${#incomplete_dir} -ge 2 ]; then
  echo "Incomplete dir set: $incomplete_dir"
  CONFIG=$(bashio::jq "${CONFIG}" ".\"incomplete-dir-enabled\"=true")
  mkdir -p $incomplete_dir
  chown abc:abc $incomplete_dir
else
  echo "Incomplete dir disabled"
  CONFIG=$(bashio::jq "${CONFIG}" ".\"incomplete-dir-enabled\"=false")
fi

# Defaults
CONFIG=$(bashio::jq "${CONFIG}" ".\"incomplete-dir\"=\"${incomplete_dir}\"")
CONFIG=$(bashio::jq "${CONFIG}" ".\"download-dir\"=\"${download_dir}\"")
CONFIG=$(bashio::jq "${CONFIG}" ".\"rpc-host-whitelist-enabled\"=false")
CONFIG=$(bashio::jq "${CONFIG}" ".\"bind-address-ipv4\"=\"0.0.0.0\"")

echo "${CONFIG}" >$CONFIGDIR/settings.json &&
  jq . -S $CONFIGDIR/settings.json | cat >temp.json && mv temp.json $CONFIGDIR/settings.json

# USER and PASS
###############

CONFIG=$(<$CONFIGDIR/settings.json)
USER=$(bashio::config 'user')
PASS=$(bashio::config 'pass')
if bashio::config.has_value 'user'; then
  BOOLEAN=true
  bashio::log.info "User & Pass set, authentification will be with user : $USER and pass : $PASS"
else
  BOOLEAN=false
  bashio::log.warning "User & Pass not set, no authentification required"
fi
CONFIG=$(bashio::jq "${CONFIG}" ".\"rpc-authentication-required\"=${BOOLEAN}")
CONFIG=$(bashio::jq "${CONFIG}" ".\"rpc-username\"=\"${USER}\"")
CONFIG=$(bashio::jq "${CONFIG}" ".\"rpc-password\"=\"${PASS}\"")
echo "${CONFIG}" >$CONFIGDIR/settings.json &&
  jq . -S $CONFIGDIR/settings.json | cat >temp.json && mv temp.json $CONFIGDIR/settings.json

# WHITELIST
###########

CONFIG=$(<$CONFIGDIR/settings.json)
WHITELIST=$(bashio::config 'whitelist')
if bashio::config.has_value 'whitelist'; then
  BOOLEAN=true
  bashio::log.info "Whitelist set, no authentification from IP $WHITELIST"
else
  BOOLEAN=false
  sed -i "2 i\"rpc-whitelist-enabled\": false," $CONFIGDIR/settings.json
fi
CONFIG=$(bashio::jq "${CONFIG}" ".\"rpc-whitelist-enabled\"=${BOOLEAN}")
CONFIG=$(bashio::jq "${CONFIG}" ".\"rpc-whitelist\"=\"$WHITELIST\"")
echo "${CONFIG}" >$CONFIGDIR/settings.json &&
  jq . -S $CONFIGDIR/settings.json | cat >temp.json && mv temp.json $CONFIGDIR/settings.json
