#!/bin/bash

NOMECONTAINER="frigate-nvidia"

docker_repo="ghcr.io/blakeblackshear/frigate:stable-tensorrt"
imagem="frigate-nvidia"

CustmN2="local_ip"
CustmN3="servidor_dns"
CustmN4="shm_size"
CustmN5="path_media"
CustmN6="gpu_device"
CustmN7="environment"
CustmN8="tmpfs_size"
CustmN9="api_key?"
CustmN10=""

VALUE2="0.0.0.0"
VALUE3="8.8.4.4"
VALUE4="128mb"
VALUE5="/srv/containers/$NOMECONTAINER/media"
VALUE6="--runtime=nvidia"
VALUE7="-e NVIDIA_VISIBLE_DEVICES=all -e NVIDIA_DRIVER_CAPABILITIES=compute,video,utility"
VALUE8="1000000000"
VALUE9="yourkey"
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 nao encontrado!"
  exit 1
fi

function set_mkdir {
  sudo mkdir -p /srv/containers/"$NOMECONTAINER"/{media,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

    docker run -d --privileged --cap-add=CAP_PERFMON --name="$NOMECONTAINER" --hostname="$NOMECONTAINER" \
    --network host \
    --no-healthcheck --restart=unless-stopped --stop-timeout 30 -v /etc/localtime:/etc/localtime:ro \
    --mount type=tmpfs,target=/tmp/cache,tmpfs-size="$VALUE8" --shm-size="$VALUE4" \
    --log-driver json-file --log-opt max-size=10m --log-opt max-file=3 \
    -e PLUS_API_KEY="$VALUE9" \
    -p 8971:8971 -p 8554:8554 -p 8555:8555/tcp -p 8555:8555/udp \
    -v /srv/containers/"$NOMECONTAINER"/config:/config \
    -v $VALUE5/media:/media/frigate \
    $VALUE6 \
    $VALUE7 \
    "$docker_repo"

    return
  fi

  docker run -d --privileged --cap-add=CAP_PERFMON --name="$NOMECONTAINER" --hostname="$NOMECONTAINER" \
  --network macvlan --ip="$VALUE2" --dns="$VALUE3" \
  --no-healthcheck --restart=unless-stopped --stop-timeout 30 -v /etc/localtime:/etc/localtime:ro \
  --mount type=tmpfs,target=/tmp/cache,tmpfs-size="$VALUE8" --shm-size="$VALUE4" \
  --log-driver json-file --log-opt max-size=10m --log-opt max-file=3 \
  -e PLUS_API_KEY="$VALUE9" \
  -v /srv/containers/"$NOMECONTAINER"/config:/config \
  -v $VALUE5/media:/media/frigate \
  $VALUE6 \
  $VALUE7 \
  "$docker_repo"

#-v "/srv/containers/$NOMECONTAINER/web:/opt/frigate/web" \
}

function docker_extras {
  if ! dpkg -l nvidia-container-toolkit &>/dev/null; then
    echo "Instalando nvidia-container-toolkit..."
    curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \
      sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
    curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
      sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
      sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
    sudo apt update && sudo apt install -y nvidia-container-toolkit
    sudo nvidia-ctk runtime configure --runtime=docker
    sudo systemctl restart docker
    clear; echo ""; echo "Instale o driver de vídeo adequado com nvidia-driver-XXX e reexecute novamente este instalador!"
    sleep 3
  fi

  docker restart "$NOMECONTAINER"
:; }

execute_main

exit 0
