#!/bin/bash
# Ubuntu base build

# vim: ts=4 sw=4 sts=4 et tw=72 :

# force any errors to cause the script and job to end in failure
set -xeu -o pipefail

rh_systems() {
    echo 'No changes to apply'
}

ubuntu_install_java_setup() {
    DISTRO="xenial" # TODO get this programatically
    echo debconf shared/accepted-oracle-license-v1-1 select true | debconf-set-selections
    echo "deb http://ppa.launchpad.net/webupd8team/java/ubuntu $DISTRO main" | \
        tee /etc/apt/sources.list.d/webupd8team-java.list
    echo "deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu $DISTRO main" | \
        tee -a /etc/apt/sources.list.d/webupd8team-java.list
    apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys EEA14886
}

ubuntu_systems() {
    apt-get clean
    ubuntu_install_java_setup

    # set up docker repo
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    sudo add-apt-repository \
        "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
         $(lsb_release -cs) \
         stable"
    
    apt-get update
    apt-get install -y \
        bzip2 \
        curl \
        git \
        less \
        oracle-java8-installer \
        oracle-java8-set-default \
        python \
        ssh \
        zip \
        maven \
        nodejs \
        nodejs-legacy \
        npm \
        python-pip \
        docker-ce \
        # end of apt-get install list
    npm install -g bower
    npm install karma --save-dev

    # set up docker priviledges
    sudo usermod -aG docker jenkins
    
    #TODO clean up
    #apt-get clean
    #apt-get purge -y
    #apt-get autoremove -y
    #rm -rf /var/lib/apt/lists/*
    #rm -rf /var/cache/oracle-jdk8-installer
    echo 'No changes to apply'
}
 
all_systems() {
    echo 'No common distribution configuration to perform'
}

echo "---> Detecting OS"
ORIGIN=$(facter operatingsystem | tr '[:upper:]' '[:lower:]')

case "${ORIGIN}" in
    fedora|centos|redhat)
        echo "---> RH type system detected"
        rh_systems
    ;;
    ubuntu)
        echo "---> Ubuntu system detected"
        ubuntu_systems
    ;;
    *)
        echo "---> Unknown operating system"
    ;;
esac

# execute steps for all systems
all_systems
