#!/bin/bash
set -e

repo="https://f-droid.org/repo/"
reponano="https://nanolx.org/fdroid/repo/"
repomicrog="https://microg.org/fdroid/repo/"
repobromite="https://fdroid.bromite.org/fdroid/repo/"

addCopy() {
cat >> Android.mk <<EOF
include \$(CLEAR_VARS)
LOCAL_MODULE := $2
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := bin/$1
LOCAL_MODULE_CLASS := APPS
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_OVERRIDES_PACKAGES := $3
include \$(BUILD_PREBUILT)

EOF
echo -e "\t$2 \\" >> apps.mk
}

rm -Rf bin apps.mk
cat > Android.mk <<EOF
LOCAL_PATH := \$(my-dir)

EOF
echo -e 'PRODUCT_PACKAGES += \\' > apps.mk

mkdir -p bin
#downloadFromFdroid packageName overrides
downloadFromFdroid() {
	mkdir -p tmp
	if [ ! -f tmp/index.xml ];then
		#TODO: Check security keys
		wget --connect-timeout=10 $repo/index.jar -O tmp/index.jar
		unzip -p tmp/index.jar index.xml > tmp/index.xml
	fi
	marketvercode="$(xmlstarlet sel -t -m '//application[id="'"$1"'"]' -v ./marketvercode tmp/index.xml || true)"
	apk="$(xmlstarlet sel -t -m '//application[id="'"$1"'"]/package[versioncode="'"$marketvercode"'"]' -v ./apkname tmp/index.xml || xmlstarlet sel -t -m '//application[id="'"$1"'"]/package[1]' -v ./apkname tmp/index.xml)"
	while ! wget --connect-timeout=10 $repo/$apk -O bin/$apk;do sleep 1;done
	addCopy $apk $1 "$2"
}

#downloadFromNanodroid packageName overrides
downloadFromNanodroid() {
        if [ ! -f tmp/index.xml ];then
                #TODO: Check security keys
                wget --connect-timeout=10 $reponano/index.jar -O tmp/index.jar
                unzip -p tmp/index.jar index.xml > tmp/index.xml
        fi
        marketvercode="$(xmlstarlet sel -t -m '//application[id="'"$1"'"]' -v ./marketvercode tmp/index.xml || true)"
	apk="$(xmlstarlet sel -t -m '//application[id="'"$1"'"]/package[versioncode="'"$marketvercode"'"]' -v ./apkname tmp/index.xml || xmlstarlet sel -t -m '//application[id="'"$1"'"]/package[1]' -v ./apkname tmp/index.xml)"
        while ! wget --connect-timeout=10 $reponano/$apk -O bin/$apk;do sleep 1;done
        addCopy $apk $1 "$2"
}

#downloadFromNanodroid packageName overrides
downloadFrommicrog() {
        if [ ! -f tmp/index.xml ];then
                #TODO: Check security keys
                wget --connect-timeout=10 $repomicrog/index.jar -O tmp/index.jar
                unzip -p tmp/index.jar index.xml > tmp/index.xml
        fi
	marketvercode="$(xmlstarlet sel -t -m '//application[id="'"$1"'"]' -v ./marketvercode tmp/index.xml || true)"
	apk="$(xmlstarlet sel -t -m '//application[id="'"$1"'"]/package[versioncode="'"$marketvercode"'"]' -v ./apkname tmp/index.xml || xmlstarlet sel -t -m '//application[id="'"$1"'"]/package[1]' -v ./apkname tmp/index.xml)"
        while ! wget --connect-timeout=10 $repomicrog/$apk -O bin/$apk;do sleep 1;done
        addCopy $apk $1 "$2"
}
#downloadFromFdroid packageName overrides
downloadFromBromite() {
	mkdir -p tmp
	if [ ! -f tmp/index.xml ];then
		#TODO: Check security keys
		wget --connect-timeout=10 $repobromite/index.jar -O tmp/index.jar
		unzip -p tmp/index.jar index.xml > tmp/index.xml
	fi
	marketvercode="$(xmlstarlet sel -t -m '//application[id="'"$1"'"]' -v ./marketvercode tmp/index.xml || true)"
	apk="$(xmlstarlet sel -t -m '//application[id="'"$1"'"]/package[versioncode="'"$marketvercode"'"]' -v ./apkname tmp/index.xml || xmlstarlet sel -t -m '//application[id="'"$1"'"]/package[1]' -v ./apkname tmp/index.xml)"
	while ! wget --connect-timeout=10 $repobromite/$apk -O bin/$apk;do sleep 1;done
	addCopy $apk $1 "$2"
}


downloadFromFdroid org.fdroid.fdroid

#YouTube viewer
downloadFromFdroid org.schabi.newpipe
#QKSMS
downloadFromFdroid com.moez.QKSMS "messaging" 

#Navigation
downloadFromFdroid net.osmand.plus

#Calendar
downloadFromFdroid ws.xsoh.etar "Calendar"

#Keyboard/IME
downloadFromFdroid com.menny.android.anysoftkeyboard "LatinIME OpenWnn"
#Play Store download
downloadFromFdroid com.aurora.store

#Phonograph
downloadFromFdroid com.kabouzeid.gramophone "Eleven"
#Alarmio
downloadFromFdroid me.jfenn.alarmio "GoogleClock DeskClock"
#Simple Gallery
downloadFromFdroid com.simplemobiletools.gallery.pro "Gallery2"
#Simple Calculator
downloadFromFdroid com.simplemobiletools.calculator "ExactCalculator"
#Mozilla Nlp
downloadFromFdroid org.microg.nlp.backed.ichnaea
#Nominatim Nlp
downloadFromFdroid org.microg.nlp.backend.nominatim

rm -rf tmp/index.xml
rm -rf tmp/index.jar

#MPV
downloadFromNanodroid is.xyz.mpv
rm -rf tmp/index.xml
rm -rf tmp/index.jar
#MicroG service core
downloadFrommicrog com.google.android.gms
#MicroG droidguard helper
downloadFrommicrog org.microg.gms.droidguard
#MicroG services framework proxy
downloadFrommicrog com.google.android.gsf
#Fakestore
downloadFrommicrog  com.android.vending

rm -rf tmp/index.xml
rm -rf tmp/index.jar
#Web browser
downloadFromBromite org.bromite.bromite "Browser2 QuickSearchBox Jelly"


#TODO: Some social network?
#Facebook? Twitter? Reddit? Mastodon?
echo >> apps.mk

rm -Rf tmp


