#!/usr/bin/env bash

# Copyright 2022, FOSS-VG Developers and Contributers
#
# This program is free software: you can redistribute it and/or modify it
# under the terms of the GNU Affero General Public License as published
# by the Free Software Foundation, version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# version 3 along with this program.
# If not, see https://www.gnu.org/licenses/agpl-3.0.en.html

echo -n "Wget or curl? "
if command -v wget >/dev/null 2>&1; then
    USE_WGET=yes
    echo "wget"
else
    if command -v curl >/dev/null 2>&1; then
        USE_WGET=no
        echo "curl"
    else
        echo "Found neither wget nor curl. Aborting."
        exit 1
    fi
fi

function download {
    URL="$1"
    DESTINATION="$2"
    SHA256SUM="$3 *$2"
    echo -n "Downloading $URL to $DESTINATION... "
    if [ $USE_WGET = yes ]; then
        wget -O "$DESTINATION" "$URL" >/dev/null 2>&1
    else
        curl -L "$URL" --output "$DESTINATION" >/dev/null 2>&1
    fi
    if sha256sum --check <<< $SHA256SUM >/dev/null 2>&1; then
        echo "done."
        return 0
    else
        echo "error."
        echo "Checksum verification failed. Your download is either corrupted or the file has been altered."
        rm -v "$DESTINATION"
        return 1
    fi
}

echo "Cleaning build files..."
scripts/clean.sh
echo "Cleaning dependencies..."
scripts/clean_dependencies.sh

set -e # failures are not acceptable here
mkdir -v dependencies/tmp
download https://github.com/DuffsDevice/tiny-utf8/archive/refs/tags/v4.4.3.tar.gz dependencies/tmp/tiny-utf8.tar.gz 8e3f61651909c9f3105d3501932a96aa65733127fb6e7cf94cb1b0a2dff42c8f
download https://github.com/fpagliughi/sockpp/archive/refs/tags/v0.7.1.tar.gz dependencies/tmp/sockpp.tar.gz 2e023528bebbd2ac083fc91fbe6d5c4158c3336bedbcff48f594f3b28f53b940
#TODO: keep the files somewhere else as a cache and only download the ones
#      we don't have or that got corrupted
#TODO: once we cache files properly, have clean_dependencies.sh prune
#      unknown files from the cache (for example old versions
#      of dependencies)

echo -n "Extracting tiny-utf8... "
gzip -d dependencies/tmp/tiny-utf8.tar.gz
tar -xf dependencies/tmp/tiny-utf8.tar -C dependencies
echo "done."

echo -n "Extracting sockpp... "
gzip -d dependencies/tmp/sockpp.tar.gz
tar -xf dependencies/tmp/sockpp.tar -C dependencies
echo "done."
echo -n "Building sockpp... "
pushd dependencies/sockpp-0.7.1/ >/dev/null 2>&1
cmake -Bbuild .
cmake --build build
popd >/dev/null 2>&1
echo "done."

rm -rv dependencies/tmp