#!/bin/bash

set -e

do_init_regen() {
  if [[ $EUID -ne 0 ]]; then
    echo "You must be root to run this script" 1>&2
    exit 1
  fi

  do_pre_regen ""
}

do_pre_regen() {
  pending_dir=$1

  cd /usr/share/yunohost/templates/nginx

  nginx_dir="${pending_dir}/etc/nginx"
  nginx_conf_dir="${nginx_dir}/conf.d"
  mkdir -p "$nginx_conf_dir"

  # install plain conf files
  cp plain/* "$nginx_conf_dir"

  # probably run with init: just disable default site, restart NGINX and exit
  if [[ -z "$pending_dir" ]]; then
    rm -f "${nginx_dir}/sites-enabled/default"
    service nginx restart
    exit 0
  fi

  # retrieve variables
  main_domain=$(cat /etc/yunohost/current_host)
  domain_list=$(sudo yunohost domain list --output-as plain --quiet)

  # add domain conf files
  for domain in $domain_list; do
    domain_conf_dir="${nginx_conf_dir}/${domain}.d"
    mkdir -p "$domain_conf_dir"

    # NGINX server configuration
    cat server.tpl.conf \
      | sed "s/{{ domain }}/${domain}/g" \
      > "${nginx_conf_dir}/${domain}.conf"

    [[ $main_domain != $domain ]] \
      && touch "${domain_conf_dir}/yunohost_local.conf" \
      || cp yunohost_local.conf "${domain_conf_dir}/yunohost_local.conf"
  done

  # remove old domain conf files
  conf_files=$(ls -1 /etc/nginx/conf.d \
                 | awk '/^[^\.]+\.[^\.]+.*\.conf$/ { print $1 }')
  for file in $conf_files; do
    domain=${file%.conf}
    [[ $domain_list =~ $domain ]] \
      || touch "${nginx_conf_dir}/${file}"
  done

  # disable default site
  mkdir -p "${nginx_dir}/sites-enabled"
  touch "${nginx_dir}/sites-enabled/default"
}

do_post_regen() {
  regen_conf_files=$1

  [ -z "$regen_conf_files" ] && exit 0

  # retrieve variables
  domain_list=$(sudo yunohost domain list --output-as plain --quiet)

  # create NGINX conf directories for domains
  for domain in $domain_list; do
    sudo mkdir -p "/etc/nginx/conf.d/${domain}.d"
  done

  # Reload nginx configuration
  sudo service nginx reload
}

FORCE=${2:-0}
DRY_RUN=${3:-0}

case "$1" in
  pre)
    do_pre_regen $4
    ;;
  post)
    do_post_regen $4
    ;;
  init)
    do_init_regen
    ;;
  *)
    echo "hook called with unknown argument \`$1'" >&2
    exit 1
    ;;
esac

exit 0