#!/bin/bash

version0="4.4"

NOMECONTAINER="unifi-network"

docker_repo="lscr.io/linuxserver/unifi-network-application:latest"
docker_repo1="docker.io/mongo:$version0"

imagem="unifi"

randompass=$(tr -dc A-Za-z0-9 </dev/urandom | head -c 8; echo)

CustmN2="local_ip"
CustmN3="servidor_dns"
CustmN4="db_name"
CustmN5="db_ip"
CustmN6="db_pass"
CustmN7="db_version"
CustmN8=""
CustmN9=""
CustmN10=""

VALUE2="0.0.0.0"
VALUE3="8.8.4.4"
VALUE4="mongodb-unifi"
VALUE5="0.0.0.0"
VALUE6="$randompass"
VALUE7="$version0"
VALUE8=""
VALUE9=""
VALUE10=""

export NOMECONTAINER docker_repo imagem
export CustmN2 CustmN3 CustmN4 CustmN5 CustmN6 CustmN7 CustmN8 CustmN9 CustmN10
export VALUE2 VALUE3 VALUE4 VALUE5 VALUE6 VALUE7 VALUE8 VALUE9 VALUE10

source /root/.index.sh

if [ -f /tmp/common-functions.sh ]; then
  source /tmp/common-functions.sh
else
  echo "ERRO: common-functions.sh não encontrado!"
  exit 1
fi

function set_mkdir {
  sudo mkdir -p /srv/containers/"$NOMECONTAINER"/config
:; }

function docker_create {
  local ip_regex="^([0-9]{1,3}\.){3}[0-9]{1,3}$"

  # Se NAO for numerico, execute como host!
  if [[ ! "$VALUE2" =~ $ip_regex ]]; then
    echo "CONTAINER NÃO AUTORIZADO A EXECUTAR COMO HOST! REFAÇA COM IP ADEQUADO."
    echo "Saindo..."
    sleep 5
    exit 1
  fi

  docker run -d --name="$NOMECONTAINER" --hostname="$NOMECONTAINER" \
  --network macvlan --ip="$VALUE2" --dns="$VALUE3" \
  --no-healthcheck --restart=unless-stopped -v /etc/localtime:/etc/localtime:ro \
  --log-driver json-file --log-opt max-size=10m --log-opt max-file=3 \
  -e PUID=1000 -e PGID=1000 \
  -e MEM_LIMIT=1536 -e MEM_STARTUP=1536 \
  -e MONGO_USER=unifi \
  -e MONGO_PASS="$VALUE6" \
  -e MONGO_HOST="$VALUE5" \
  -e MONGO_PORT=27017 \
  -e MONGO_DBNAME=unifi \
  -e MONGO_AUTHSOURCE=admin \
  -e MONGO_TLS= \
  -v /srv/containers/"$NOMECONTAINER"/config:/config \
  "$docker_repo"

makecontextra
}

function makecontextra {
  if ! docker pull "$docker_repo1"; then
    echo "Erro: docker pull do MongoDB falhou... saindo."; sleep 3
    exit 1
  fi

  mkdir -p /srv/containers/"$VALUE4"

cat << 'EOF' | sudo tee /srv/containers/"$VALUE4"/init-mongo.sh > /dev/null
#!/bin/bash
if which mongosh > /dev/null 2>&1; then
  mongo_init_bin='mongosh'
else
  mongo_init_bin='mongo'
fi

"${mongo_init_bin}" <<EOF
use ${MONGO_AUTHSOURCE}
db.auth("${MONGO_INITDB_ROOT_USERNAME}", "${MONGO_INITDB_ROOT_PASSWORD}")

db.createUser({
  user: "${MONGO_USER}",
  pwd: "${MONGO_PASS}",
  roles: [
    { db: "${MONGO_DBNAME}", role: "dbOwner" },
    { db: "${MONGO_DBNAME}_stat", role: "dbOwner" },
    { db: "${MONGO_DBNAME}_audit", role: "dbOwner" }
  ]
})
EOF
EOF

sudo chmod +x /srv/containers/"$VALUE4"/init-mongo.sh

  if [ -d /srv/containers/"$VALUE4" ]; then
    if docker stop "$VALUE4"; then
      docker rm "$VALUE4"
      echo "SIGTERM + STOP + CLEAN: O container $VALUE4 estava executando, foi parado e removido. Continuando..."; sleep 3
    elif docker rm "$VALUE4"; then
      echo "STOP + CLEAN: O container $VALUE4 estava parado e foi removido. Continuando..."; sleep 3
    else
      echo "CLEAN: O container $VALUE4 nao estava executando. Continuando..."; sleep 3
    fi
  fi

  if docker rm -f "$VALUE4"; then
    echo "SIGKILL + RM: O container $VALUE4 estava executando SEM VOLUME! Foi morto e removido. Continuando..."; sleep 3
  fi

  docker run -d \
  --name="$VALUE4" \
  --network macvlan \
  --ip="$VALUE5" \
  --dns=1.1.1.1  \
  -e MONGO_INITDB_ROOT_USERNAME=root \
  -e MONGO_INITDB_ROOT_PASSWORD="$VALUE6" \
  -e MONGO_USER=unifi \
  -e MONGO_PASS="$VALUE6" \
  -e MONGO_HOST=unifi-db \
  -e MONGO_PORT=27017 \
  -e MONGO_DBNAME=unifi \
  -e MONGO_AUTHSOURCE=admin \
  -v /srv/containers/"$VALUE4"/db:/data/db \
  -v /srv/containers/"$VALUE4"/init-mongo.sh:/docker-entrypoint-initdb.d/init-mongo.sh:ro \
  --restart unless-stopped \
  "$docker_repo1"

  NOMECONTAINER="$VALUE4"
  datetime0=$(date +"%d-%m-%Y_%H:%M")
  configfile="/srv/containers.yaml"
  imagem="mongodb"
  sudo yq -i ".\"${NOMECONTAINER}\".instalacao = \"${datetime0}\"" "$configfile"
  sudo yq -i ".\"${NOMECONTAINER}\".img_base = \"${imagem}\"" "$configfile"
  sudo yq -i ".\"${NOMECONTAINER}\".nome_custom = \"${VALUE4}\"" "$configfile"
}

function docker_extras {
  # NÃO ALTERE AQUI, isso aqui roda após o inicio do principal container.
  # Edite acima em makecontextra para ajustar detalhes do .db
:; }

execute_main

exit 0
