#!/bin/bash

set -e

source /opt/datadog/apm/inject/common_functions.sh

function usage ()
{
    cat << EOF
Datadog Host and Container Injection Installer
Usage :  $0 [options]

    Options:
    -h|--help             OPTIONAL Display this message
    --uninstall           OPTIONAL Remove installation
    --no-config-change    OPTIONAL Do not alter datadog.yaml or daemon.json
    --no-agent-restart    OPTIONAL Do not restart the datadog agent
    --no-docker-reload    OPTIONAL Do not reload docker config
EOF

}

if [ -z "$uninstall_flag" ]; then
  if id dd-agent &>/dev/null; then
    $sudo_cmd sh -c "mkdir -p /opt/datadog/apm/inject/run"
    $sudo_cmd sh -c "chown -R dd-agent:dd-agent /opt/datadog/apm/inject/run"
  else
    echo "Datadog agent installation not found. LD Preload injection only works with an installed agent. Aborting!"
    exit
  fi

  # Add UDS config
  if [ -z "$no_config_change" ] && [ -f /etc/datadog-agent/datadog.yaml ] && ! $sudo_cmd sh -c 'grep -q "# BEGIN LD PRELOAD CONFIG" /etc/datadog-agent/datadog.yaml' ; then
    $sudo_cmd sh -c "exec cat >> /etc/datadog-agent/datadog.yaml"<<EOF
# BEGIN LD PRELOAD CONFIG
apm_config:
  receiver_socket: /opt/datadog/apm/inject/run/apm.socket
use_dogstatsd: true
dogstatsd_socket: /opt/datadog/apm/inject/run/dsd.socket
# END LD PRELOAD CONFIG
EOF
    echo "Added UDS config to /etc/datadog-agent/datadog.yaml"
  fi

  # Do nothing if --no-config-change or we detect dd-shim in the daemon config
  if [ -z "$no_config_change" ] && { [ ! -f $daemon_config ] || ! grep -q dd-shim $daemon_config; }; then
    if [ ! -d "$daemon_config_dir" ]; then
      echo "$daemon_config_dir does not exist. Please ensure docker is installed"
      exit 1
    fi

    # Backup old docker daemon config
    if [ -f "$daemon_config" ] ; then
      $sudo_cmd sh -c "mv $daemon_config $daemon_config_backup"
      echo "Backed up $daemon_config to $daemon_config_backup"
    fi

    # Link new daemon config
    $sudo_cmd sh -c "ln -s $BINARY_INSTALL_PATH/daemon.json /etc/docker/daemon.json"
    echo "Linked docker daemon.json config"
  fi

else
  # NOTE: sed -i does not work on macos

  if [ -z "$no_config_change" ]; then
    if [ -f /etc/datadog-agent/datadog.yaml ]; then
      # Remove config block from datadog.yaml
      $sudo_cmd sh -c "sed -i '/# BEGIN LD PRELOAD CONFIG/,/# END LD PRELOAD CONFIG/d' /etc/datadog-agent/datadog.yaml"
      echo "Removed UDS config from /etc/datadog-agent/datadog.yaml"
    fi

    # Delete daemon config if it contains "dd-shim"
    if [ -f $daemon_config ] && grep -q dd-shim $daemon_config; then
      $sudo_cmd sh -c "rm $daemon_config"
      echo "Removed $daemon_config"
    fi

    # Restore backup if it doesn't overwrite
    if [ -f "$daemon_config_backup" ] && [ ! -f $daemon_config ] ; then
      $sudo_cmd sh -c "mv $daemon_config_backup $daemon_config"
      echo "Restored $daemon_config_backup to $daemon_config"
    fi
  fi
fi

# Restart happens in both the install and uninstall case
if [ -z "$no_agent_restart" ]; then
  service_control restart datadog-agent
fi

# Reload happens in both the install and uninstall case
if [ -z "$no_docker_reload" ]; then
  service_control reload docker
fi
