#!/bin/bash

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

REQUIRED="git cargo"

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

FIRST_DIR="$(pwd)"

# Vars
URL_GN="http://commondatastorage.googleapis.com/chromeos-localmirror/distfiles/gn-3e43fac03281e2f5e5ae5f27c8e9a6bb45966ea9.bin"
URL_PLATFORM2_GIT="https://chromium.googlesource.com/chromiumos/platform2"
URL_RUST_CRATES_GIT="https://chromium.googlesource.com/chromiumos/third_party/rust_crates"
URL_PROTO_LOGGING_GIT="https://android.googlesource.com/platform/frameworks/proto_logging"
CHROMIUM_BRANCH="release-R92-13982.B"

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

trap ctrl_c INT

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

echo Generating source package in "${TMP_DIR}"
OUT_DIR="${TMP_DIR}/out"
BIN_DIR="${TMP_DIR}/bin"

${DRY_RUN} mkdir -p "${OUT_DIR}"
${DRY_RUN} mkdir -p "${BIN_DIR}"

pushd "${BIN_DIR}"
wget -O gn "${URL_GN}"
popd
export PATH="${PATH}:${BIN_DIR}"

# Check dependencies
# libchrome requires modp_b64
APT_REQUIRED="modp-b64 libchrome 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"

# SPEED UP TEST, REMOVE ME
APT_REQUIRED="modp-b64 libchrome flatbuffers-compiler"

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"
            echo Run the following to build and install:
            echo "  pushd ${PARENT_DIR}/${name}/"
            echo "  ./gen-src-pkg.sh ${OUT_DIR}"
            echo "  sudo dpkg -i ${OUT_DIR}"/${name}*.deb || ctrl_c
            echo "  popd"
            ${DRY_RUN} rm -rf ${TMP_DIR}
            exit 1
        elif [ "${name}" == "libchrome" ]; then
            echo "${name} source is available to build in this repository"
            echo Run the following to build and install:
            echo   pushd "${PARENT_DIR}/${name}/"
            echo   ./gen-src-pkg.sh "${OUT_DIR}"
            echo   sudo dpkg -i "${OUT_DIR}"/${name}*.deb || ctrl_c
            echo   popd
            ${DRY_RUN} rm -rf ${TMP_DIR}
            exit 1
        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[*]}"
    echo
    echo Run the following to build and install:
    echo "  sudo apt install" "${APT_MISSING[*]}" || ctrl_c
    ${DRY_RUN} rm -rf ${TMP_DIR}
    exit 1
fi

# Check cargo for cxxbridge-cmd
HAS_CXX="$(cargo install --list | grep cxxbridge-cmd)"
if [ "$HAS_CXX" == "" ]; then
    echo "Missing cxxbridge-cmd cargo package"
    echo Run the following to build and install:
    echo   cargo install cxxbridge-cmd || ctrl_c
    ${DRY_RUN} rm -rf ${TMP_DIR}
    exit 1
fi

HAS_CXX="$(cargo install --list | grep cargo-proc-macro)"
if [ "$HAS_CXX" == "" ]; then
    echo "Missing cargo-proc-macro cargo package"
    echo Run the following to build and install:
    echo   cargo install cargo-proc-macro || ctrl_c
    ${DRY_RUN} rm -rf ${TMP_DIR}
    exit 1
fi

# Git
GIT_DIR="${OUT_DIR}/repos"
GIT_DIR_PLATFORM2="${GIT_DIR}/platform2"
GIT_DIR_PLATFORM2_COMMON_MK="${GIT_DIR_PLATFORM2}/common-mk"
GIT_DIR_PLATFORM2_GN="${GIT_DIR_PLATFORM2}/.gn"
GIT_DIR_RUST_CRATES="${GIT_DIR}/rust_crates"
GIT_DIR_PROTO_LOGGING="${GIT_DIR}/proto_logging"
GIT_DIR_BT="$(echo "${PARENT_DIR}" | rev | cut -d '/' -f 3- | rev)"

# Staging
STAGING_DIR="${OUT_DIR}/staging"
STAGING_DIR_PLATFORM2="${STAGING_DIR}/platform2"
STAGING_DIR_COMMON_MK="${STAGING_DIR}/common-mk"
STAGING_DIR_GN="${STAGING_DIR}/.gn"
STAGING_DIR_BT="${STAGING_DIR}/bt"
# No it isn't a typo, use 'rust'
STAGING_DIR_RUST_CRATES="${STAGING_DIR}/rust"
STAGING_DIR_PROTO_LOGGING="${STAGING_DIR}/proto_logging"

OUTPUT_DIR="${OUT_DIR}/output"
EXTERNAL_DIR="${STAGING_DIR}/external"
EXTERNAL_DIR_RUST="${EXTERNAL_DIR}/rust"
EXTERNAL_DIR_PROTO_LOGGING="${EXTERNAL_DIR}/proto_logging"

${DRY_RUN} mkdir -p "${GIT_DIR}"
${DRY_RUN} mkdir -p "${STAGING_DIR}"
${DRY_RUN} mkdir -p "${OUTPUT_DIR}"
${DRY_RUN} mkdir -p "${EXTERNAL_DIR}"

${DRY_RUN} git clone -b "${CHROMIUM_BRANCH}" "${URL_PLATFORM2_GIT}" "${GIT_DIR_PLATFORM2}"

${DRY_RUN} git clone "${URL_RUST_CRATES_GIT}" "${GIT_DIR_RUST_CRATES}"
${DRY_RUN} git clone "${URL_PROTO_LOGGING_GIT}" "${GIT_DIR_PROTO_LOGGING}"

${DRY_RUN} ln -s "${GIT_DIR_PLATFORM2_COMMON_MK}" "${STAGING_DIR_COMMON_MK}" || ctrl_c
${DRY_RUN} ln -s "${GIT_DIR_PLATFORM2_GN}" "${STAGING_DIR_GN}" || ctrl_c
${DRY_RUN} ln -s "${GIT_DIR_BT}" "${STAGING_DIR_BT}" || ctrl_c
${DRY_RUN} ln -s "${GIT_DIR_RUST_CRATES}" "${EXTERNAL_DIR_RUST}" || ctrl_c
${DRY_RUN} ln -s "${GIT_DIR_PROTO_LOGGING}" "${EXTERNAL_DIR_PROTO_LOGGING}" || ctrl_c

${DRY_RUN} "${GIT_DIR_BT}"/build.py --bootstrap-dir "$(readlink -f "${OUT_DIR}")" --libdir /usr/lib || ctrl_c

PKG_DIR="${SCRIPT_DIR}/package"
PKG_USR_DIR="${PKG_DIR}/usr"

OUT_PKG_DIR="${OUT_DIR}/package"
OUT_PKG_USR_DIR="${OUT_PKG_DIR}/usr"

BIN_OUTPUT="${OUTPUT_DIR}/debug"

BTCLIENT_BIN="${BIN_OUTPUT}/btclient"
BTMANAGERD_BIN="${BIN_OUTPUT}/btmanagerd"
BTADAPTERD_BIN="${BIN_OUTPUT}/btadapterd"

${DRY_RUN} cp -r "${PKG_DIR}" "${OUT_DIR}/"

${DRY_RUN} cp "${BTCLIENT_BIN}" "${OUT_PKG_USR_DIR}/bin/"
${DRY_RUN} cp "${BTMANAGERD_BIN}" "${OUT_PKG_USR_DIR}/libexec/bluetooth/"
${DRY_RUN} cp "${BTADAPTERD_BIN}" "${OUT_PKG_USR_DIR}/libexec/bluetooth/"

${DRY_RUN} dpkg-deb --build "${OUT_PKG_DIR}" "${FIRST_DIR}/floss.deb"

${DRY_RUN} rm -rf ${TMP_DIR}

echo
echo "Now run:"
echo "    sudo dpkg -i "${FIRST_DIR}"/floss.deb"
