#!/bin/bash

DRY_RUN=""
if [ $# -gt 0 ]; then
    if [ "$1" == "--dry-run" ]; then
        DRY_RUN="echo "
    fi
fi

echo "Checking for dependencies..."

REQUIRED="git cargo"

for name in $(echo ${REQUIRED});
do
    type -P "$name" &>/dev/null || { echo "Install '$name'" >&2; exit 1;}
done


SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PARENT_DIR="$(echo ${SCRIPT_DIR} | rev | cut -d '/' -f 2- | rev )"

TMP_DIR=$(mktemp -d)
OUT_DIR="${TMP_DIR}/out"

trap ctrl_c INT

function ctrl_c() {
    rm -rf "${TMP_DIR}"
    exit 1
}

# Check dependencies
# libchrome requires modp_b64
APT_REQUIRED="flatbuffers-compiler flex g++-multilib gcc-multilib generate-ninja \
gnupg gperf libc++-dev libdbus-1-dev libevent-dev libevent-dev libflatbuffers-dev libflatbuffers1 \
libgl1-mesa-dev libglib2.0-dev liblz4-tool libncurses5 libnss3-dev libprotobuf-dev libre2-9 \
libssl-dev libtinyxml2-dev libx11-dev libxml2-utils ninja-build openssl protobuf-compiler unzip \
x11proto-core-dev xsltproc zip zlib1g-dev debmake ninja-build modp-b64 libchrome"

APT_MISSING=()
for name in $(echo ${APT_REQUIRED});
do
    R="$(apt -qq list "${name}" 2>/dev/null | grep "installed")"
    if [ "${R}" == "" ]; then
        echo "Need to install '${name}'" >&2;
        if [ "${name}" == "modp-b64" ]; then
            echo "${name} source is available to build in this repository"
            # dir name is different than package name :'(
            ${DRY_RUN} pushd "${PARENT_DIR}/modp_b64/"
            ${DRY_RUN} ./gen-src-pkg.sh "${OUT_DIR}"
            ${DRY_RUN} sudo dpkg -i "${OUT_DIR}"/${name}*.deb || ctrl_c
            ${DRY_RUN} popd
        elif [ "${name}" == "libchrome" ]; then
            echo "${name} source is available to build in this repository"
            ${DRY_RUN} pushd "${PARENT_DIR}/${name}/"
            ${DRY_RUN} ./gen-src-pkg.sh "${OUT_DIR}"
            ${DRY_RUN} sudo dpkg -i "${OUT_DIR}"/${name}*.deb || ctrl_c
            ${DRY_RUN} popd
        else
            APT_MISSING+=("${name}")
        fi
    fi
done

APT_MISSING_LEN="${#APT_MISSING[@]}"

if [ $APT_MISSING_LEN -gt 0 ]; then
    echo "Missing Packages:"
    echo "    ${APT_MISSING[*]}"
    ${DRY_RUN} sudo apt install "${APT_MISSING[*]}" || ctrl_c
else
    rm -rf "${TMP_DIR}"
    exit 0
fi

echo Generating missing packages in "${TMP_DIR}"

# Check cargo for cxxbridge-cmd
HAS_CXX="$(cargo install --list | grep cxxbridge-cmd)"
if [ "$HAS_CXX" == "" ]; then
    echo "Missing cxxbridge-cmd cargo package"
    echo "Installing 'cxxbridge-cmd'" >&2
    ${DRY_RUN} cargo install cxxbridge-cmd || ctrl_c
fi

HAS_CXX="$(cargo install --list | grep cargo-proc-macro)"
if [ "$HAS_CXX" == "" ]; then
    echo "Missing cargo-proc-macro cargo package"
    echo "Installing 'cxxbridge-cmd'" >&2
    ${DRY_RUN} cargo install cargo-proc-macro || ctrl_c
fi

rm -rf "${TMP_DIR}"
echo "DONE"
