#!/usr/bin/env bash
set -eo pipefail
[[ $DOKKU_TRACE ]] && set -x

nginx_needs_upgrade() {
  declare desc="checks as to whether nginx needs to be installed or upgraded"
  local MAJOR_VERSION MINOR_VERSION
  local NEEDS_UPGRADE=true

  if ! which nginx >/dev/null 2>&1; then
    echo $NEEDS_UPGRADE
    return
  fi

  MAJOR_VERSION=$(nginx -v 2>&1 | cut -d'/' -f 2 | awk '{split($0,a,"."); print a[1]}')
  MINOR_VERSION=$(nginx -v 2>&1 | cut -d'/' -f 2 | awk '{split($0,a,"."); print a[2]}')
  if [[ "$MAJOR_VERSION" -ge "2" ]]; then
    NEEDS_UPGRADE=false
  elif [[ "$MAJOR_VERSION" -ge "1" ]] && [[ "$MINOR_VERSION" -ge "8" ]]; then
    NEEDS_UPGRADE=false
  fi

  echo $NEEDS_UPGRADE
}

nginx_install() {
  declare desc="install nginx and dnsutils"
  export DEBIAN_FRONTEND=noninteractive
  apt-get install -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" --force-yes -qq -y nginx dnsutils
}

trigger-nginx-vhosts-dependencies() {
  declare desc="installs dependencies for the nginx-vhosts plugin"
  declare trigger="dependencies"

  case "$DOKKU_DISTRO" in
    debian)
      nginx_install
      ;;

    ubuntu)
      export DEBIAN_FRONTEND=noninteractive
      local NEEDS_UPGRADE=$(nginx_needs_upgrade)
      if [[ "$NEEDS_UPGRADE" == "false" ]]; then
        return
      fi

      if ! which nginx >/dev/null 2>&1; then
        nginx_install
        return
      fi

      ubuntu_year=$(lsb_release -d | cut -d ' ' -f 2 | awk '{split($0,a,"."); print a[1]}')
      ubuntu_month=$(lsb_release -d | cut -d ' ' -f 2 | awk '{split($0,a,"."); print a[2]}')
      [[ "$ubuntu_year" -ge "16" ]] && exit 0
      [[ "$ubuntu_year" -eq "15" ]] && [[ "$ubuntu_month" -eq "10" ]] && exit 0

      [[ -z "$CIRCLECI" ]] && apt-get install -qq -y software-properties-common python-software-properties
      [[ -n "$CIRCLECI" ]] && aptitude install -q -y software-properties-common python-software-properties

      add-apt-repository -y ppa:nginx/stable
      apt-get update -qq >/dev/null
      nginx_install
      ;;

    opensuse)
      zypper -q in -y nginx bind-utils
      ;;

    arch)
      pacman -S --noconfirm --noprogressbar --needed nginx bind-tools
      ;;
  esac
}

trigger-nginx-vhosts-dependencies "$@"
