#!/bin/bash -e
VERSION=v0.95

spath=$( cd "$(dirname "$0")" ; pwd -P )
curdir=$( pwd -P )
source $spath/utils/android
source $spath/utils/banners

# Set default vars
DISTRO=buster; ARCH=arm64

# Default packages
DEFAULT_PACKAGES+="\
bash
ca-certificates
"

# Parse command line parameters
if [ $# -lt 1 ]; then usage; fi; POSITIONAL=()
while [[ $# -gt 0 ]]; do key="$1";
case $key in
    prepare) PREPARE=1;     shift || true;    ;;
    shell) ASHELL=1;     shift || true;     ;;
    --archive) TARF=$2; shift || true; shift || true; ;;
    --tracers) source $spath/packages/tracers; shift || true; ;;
    --compilers) source $spath/packages/compilers; shift || true; ;;
    --editors) source $spath/packages/editors; shift || true; ;;
    --scheduler) source $spath/packages/scheduler; shift || true; ;;
    --fullbuild) for f in $(ls $spath/packages); do source packages/$f; done; shift || true; ;;
    --download) DOWNLOAD=1; shift || true; ;;
    --bcc) source $spath/packages/bcc; shift || true;     ;;
    --kernelsrc) KERNELSRC="$2"; shift || true;     shift || true;     ;;
    --tempdir) TDIR="$2"; shift || true;     shift || true;     ;;
    --buildtar) TARDIR="$2"; shift || true;     shift || true;     ;;
    --debug) set -x; shift || true; ;;
    *) echo "Unknown option ($1)"; usage; ;;
esac
done

if [ ! -z "$PREPARE" ] && [ -z "$DOWNLOAD" ] && [ -z "$TARF" ] && [ -z "$PACKAGES" ] && [ -z "$KERNELSRC" ]; then
	echo "Need to specifify something to prepare, or try: ./andrdeb prepare --download"; usage; fi

if [[ ! -z ${TARDIR+x} ]] && [[ ! -d $TARDIR ]]; then die 7 "Tar dir specified doesn't exist"; fi

do_adb_root || die 3 "adb root failed, make sure:
- device is connected, and there's only one device (TODO: add multi device support)
- device is userdebug."

##########################################################
#  SHELL
##########################################################
if [ ! -z ${ASHELL+x} ]; then
	set +e; adb shell ls /data/androdeb/debian/.bashrc > /dev/null 2>&1
	if [ $? -ne 0 ]; then
	   die 2 "Device doesn't have an androdeb environment, run \"./androdeb prepare\" first";
	fi; set -e

	adb shell -t /data/androdeb/run
	exit 0
fi

##########################################################
#  PREPARE 
##########################################################

function do_cleanup() {
	rm -rf $TDIR/*; if [ $MKTEMP -eq 1 ]; then rm -rf $TDIR; fi
}

function push_unpack_headers() {
	adb shell ls /data/androdeb/debian > /dev/null 2>&1
	if [ $? -ne 0 ]; then die 8 "Existing androdev env not found to update kernel headers into."; fi

	adb shell rm -rf /data/androdeb/debian/kernel-headers/
	adb shell mkdir  /data/androdeb/debian/kernel-headers/
	adb push $TDIR_ABS/kh.tgz /data/androdeb/
	echo "Storing kernel headers into androdeb /kernel-headers/"
	adb shell tar -xvf /data/androdeb/kh.tgz -C /data/androdeb/debian/kernel-headers/ > /dev/null
	adb shell rm /data/androdeb/kh.tgz
}

function all_done_banner() {
	echo "All done! Run \"androdeb shell\" to enter environment"
}

# Prepare is the last command checked
if [ -z "$PREPARE" ]; then usage; fi

if [[ $EUID -ne 0 ]]; then die 6 "For prepare, this tool must run as root. Try: ./sudo androdeb prepare <args>"; fi

if [ ! -z "$TARF" ] && [ ! -f $TARF ] && [ -z "$DOWNLOAD" ]; then die 7 "archive provided doesn't exist"; fi

if [ ! -z "$KERNELSRC" ] && [ ! -d $KERNELSRC ]; then die 5 "Kernel source directory provided doesn't exist"; fi

print_prepare_banner

# Where do we want to store temporary files
MKTEMP=0; if [[ -z ${TDIR+x} ]]  || [[ ! -d "${TDIR}" ]]; then
	TDIR=`mktemp -d`; MKTEMP=1; fi
rm -rf $TDIR/*
TDIR_ABS=$( cd "$TDIR" ; pwd -P )

if [ ! -z "$DOWNLOAD" ]; then
   echo "Downloading Androdeb from the web..."; echo ""
   curl -L https://github.com/joelagnel/androdeb/releases/download/$VERSION/androdeb-fs.tgz --output $TDIR_ABS/androdeb-fs.tgz;
   TARF=$TDIR_ABS/androdeb-fs.tgz; fi

OUT_TMP=$TDIR/debian; rm -rf $OUT_TMP; mkdir -p $OUT_TMP

# Package kernel headers
if [ ! -z "$KERNELSRC" ]; then
	echo "Building and updating kernel headers from kernel source dir ($KERNELSRC)"
	$spath/bcc/build-kheaders-targz.sh ${KERNELSRC} $TDIR_ABS/kh.tgz > /dev/null

	# Is header update the only thing left to do?
	if [[ -z "$PACKAGES" ]] && [[ -z "$TARF" ]]; then
		push_unpack_headers; do_cleanup; all_done_banner; exit 0; fi

	mkdir $OUT_TMP/kernel-headers
	tar -xvf $TDIR_ABS/kh.tgz -C $OUT_TMP/kernel-headers/ > /dev/null
fi

# Build FS from existing tar, very simple.
if [ ! -z "$TARF" ]; then
	echo "Using archive at $TARF for filesystem preparation"
	adb shell mkdir -p /data/androdeb/
	adb push $TARF /data/androdeb/deb.tar.gz
	adb push $spath/addons/* /data/androdeb/
	adb shell /data/androdeb/device-unpack

	if [ ! -z "$KERNELSRC" ]; then push_unpack_headers; fi

	do_cleanup; all_done_banner; exit 0
fi

PACKAGES+="$DEFAULT_PACKAGES"
echo "Using temporary directory: $TDIR"

time qemu-debootstrap --arch arm64 --include=$(make_csv "$PACKAGES") \
	$DISTRO $OUT_TMP http://deb.debian.org/debian/

# Some reason debootstrap leaves these mounted
umount $OUT_TMP/proc/sys/fs/binfmt_misc || true
umount $OUT_TMP/proc || true

# Make bash the default shell
chroot $OUT_TMP rm /bin/sh || true
chroot $OUT_TMP ln -s /bin/bash /bin/sh || true
cp $spath/addons/bashrc $OUT_TMP/.bashrc

# For mounting android partitions
mkdir $OUT_TMP/system
mkdir $OUT_TMP/vendor

# Cleanup
rm -rf $OUT_TMP/lib/udev/*
rm -rf $OUT_TMP/var/lib/apt/lists/*
rm -rf $OUT_TMP/var/cache/apt/archives/*deb
rm -rf $OUT_TMP/usr/share/locale/*
rm -rf $OUT_TMP/usr/lib/share/locale/*
rm -rf $OUT_TMP/usr/share/doc/*
rm -rf $OUT_TMP/usr/lib/share/doc/*
rm -rf $OUT_TMP/usr/share/ieee-data/*
rm -rf $OUT_TMP/usr/lib/share/ieee-data/*
rm -rf $OUT_TMP/usr/share/man/*
rm -rf $OUT_TMP/usr/lib/share/man/*

# Clone BCC if needed
if [[ ! -z ${INSTALL_BCC+x} ]]; then
git clone https://github.com/iovisor/bcc.git $TDIR/debian/bcc-master
cp $spath/bcc/build-bcc.sh $TDIR/debian/bcc-master/; fi

echo "Compressing new filesystem to prepare to push to Android /data/androdeb/"
tar -zcf $TDIR/deb.tar.gz -C $TDIR debian

# Push tar to device and start unpack
adb shell mkdir -p /data/androdeb/
adb push $TDIR/deb.tar.gz /data/androdeb/
adb push $spath/addons/* /data/androdeb/
adb shell /data/androdeb/device-unpack

# Build BCC and install bcc on device if needed
if [[ ! -z ${INSTALL_BCC+x} ]]; then
adb shell /data/androdeb/run-command /bcc-master/build-bcc.sh; fi

do_cleanup

# Extract a tar of the built, compiled and installed androdeb env
if [[ ! -z ${TARDIR+x} ]]; then
	echo "Creating and pulling tarball of androdeb env from device"
	adb shell /data/androdeb/build-debian-tar
	adb pull /data/androdeb/androdeb-fs.tgz $TARDIR/
	adb shell rm /data/androdeb/androdeb-fs.tgz; fi

all_done_banner
