#!/bin/bash

if [ "$#" != "1" ]; then
  echo 'Error: missing non-optional parameter'
  exit 1
fi

exit_error() {
  echo -e '\e[1;31mSomething went wrong. :( Inspect the output above and if there is a bug, please report it.'
  echo 'Press ENTER to continue...'
  read && exit 1
}

wget_deb_file() {
  file="$(mktemp -u)"
  wget -O "$file" "$1"
  dpkg -i "$file" && apt-get -f install
  status=$?
  [ "$status" = "0" ] || exit_error
  rm "$file"
  return $status
}

aptget_from_repo() {
  local sources_file="/etc/apt/sources.list.d/debwin-download-package_$1.list"
  local package_name="$2"
  local sources_line="$3"
  echo "$sources_line" > "$sources_file"
  apt-get -y update || true
  apt-get -y --allow-unauthenticated install $package_name
  status=$?
  [ "$status" = "0" ] || exit_error
  rm "$sources_file"
  apt-get -y update || true
  return $status
}

download_dropbox() {
  apt-key adv --keyserver pgp.mit.edu --recv-keys 5044912E || true
  aptget_from_repo 'dropbox' 'dropbox' 'deb http://linux.dropbox.com/debian/ sid main'
}

download_skype() {
  wget_deb_file 'http://www.skype.com/go/getskype-linux-deb' &&
  sed -i 's/Exec=skype/Exec=env PULSE_LATENCY_MSEC=60 skype/' /usr/share/applications/skype.desktop  # FIXME: fixes pulseaudio 4 Skype bug: https://wiki.debian.org/skype
  grep PULSE_LATENCY_MSEC /etc/environment >/dev/null || 
    echo 'PULSE_LATENCY_MSEC=40  # potentially fixes Skype, Flash, ...' >> /etc/environment
}

download_steam() {
  aptget_from_repo 'steam' 'steam' 'deb http://http.debian.net/debian testing non-free'
}

download_teamviewer() {
  wget_deb_file 'http://download.teamviewer.com/download/teamviewer_linux.deb'
}

for package in dropbox skype steam teamviewer; do
  if dpkg -s $package >/dev/null 2>&1; then
    rm /usr/share/applications/download_$package.desktop
    if [ "$1" = "$package" ]; then
      echo -e '\e[1;32mPackage $package is already installed.'
      read
      exit 0
    fi
  fi
done

case "$1" in
  dropbox)    download_dropbox ;;
  skype)      download_skype   ;;
  steam)      download_steam   ;;
  teamviewer) download_teamviewer ;;
  *) echo "no download rules for package $1"; exit 2 ;;
esac

if [ "$?" = "0" ]; then
  rm /usr/share/applications/download_$1.desktop
  echo -e '\e[1;32mEverything is OK. Enjoy. ;)'
  echo 'Press ENTER to continue...'
  read
  exit 0
else
  exit_error
fi
