#!/bin/bash -e
# Creates a deb package suitable for the dpkg program. Starts from a clean debian package directory
	# Usage: ./tools/createpackage.sh 1.0.0 (where $1 is the version e.g. 1.0.0)

function run_as_www {
	PWD=$( pwd )
	/bin/bash -c "cd $PWD && $1"
	# su - www-data -s /bin/bash -c "cd $PWD && $1"
}

if [ ! $1 ]
then
	echo "=> [ERROR] I need a VCS release tag!"
	exit 1
fi

version=$1
project_name="CliDEsc"
project_release="$project_name-$version"
project_dir="/var/www/html/.clidesc"
downloaded_as="$project_release.tar.gz"

echo "=> Generating Debian Package for version: $version"

echo "$version" > app/clidesc_version

if [[ -d pkg-debian ]]
then
	echo "=> Removing previousely generated package container..."
	rm -rf pkg-debian
fi

run_as_www "mkdir -p pkg-debian/DEBIAN"
run_as_www "mkdir -p pkg-debian/etc/cron.d"
run_as_www "mkdir -p pkg-debian/usr/bin"
run_as_www "mkdir -p pkg-debian/usr/share/doc/clidesc"
run_as_www "mkdir -p \"pkg-debian$project_dir\""

# Fetch the archive and unpack it
echo "=> Fetching archive, unpacking archive and copying contents..."
echo "=> Please type your private GitLab token:"
read -s token

run_as_www "wget --header \"PRIVATE-TOKEN: $token\" -O $downloaded_as https://gitlab.catalyst.net.nz/api/v4/projects/71/repository/archive?sha=$version"

if [ ! -f $downloaded_as ]
then
	echo "=> [ERROR] There seems to be a problem with the downloaded archive. Aborting!"
	exit 1
fi

echo "=> Unpacking archive $downloaded_as..."

run_as_www "tar -xvf $downloaded_as -C \"pkg-debian$project_dir\" --strip-components=1"

run_as_www "echo \"$version\" > \"pkg-debian$project_dir/app/clidesc_version\""

echo "=> Installing Composer deps..."
pwd=$( pwd )
run_as_www "composer install --working-dir=\"pkg-debian$project_dir\" && cd \"pkg-debian$project_dir/themes/bootstarter\""

# Generate the CHANGELOG
echo "=> Generating CHANGELOG..."

run_as_www "cd $pwd && ./tools/changelog.sh"

echo "=> Populating folder structure..."

# Populate the debian directory
# Modify the control file according to the current version
run_as_www "cat .deb/control | sed -e \"s#Version: 0.0.0#Version: $version#\" > pkg-debian/DEBIAN/control"
run_as_www 'cp -p .deb/postinst.sh pkg-debian/DEBIAN/postinst'
run_as_www 'cp .deb/AUTHORS pkg-debian/usr/share/doc/clidesc/'
run_as_www "cat .deb/README | sed -e \"s#0.0.0#$version#\" > pkg-debian/usr/share/doc/clidesc/README"
run_as_www 'cp .deb/CHANGELOG.md pkg-debian/usr/share/doc/clidesc/CHANGELOG.md'
run_as_www 'cp .deb/cron/* pkg-debian/etc/cron.d/'

# formerly using fakeroot
sudo chown root:root pkg-debian/etc/cron.d/silverstripe*

# Move _ss_environment.php to /var/www
run_as_www 'cp -p .deb/.env.deb pkg-debian/var/www/html/.env'

# Copy install script into executable location (It is run from DEBIAN/postinst)
cat .deb/install.sh | sed -e "s#project_version=\"0.0.0\"#project_version=\"$version\"#" > pkg-debian/usr/bin/clidesc

# Lightweight check for a 2nd param to indiciate that we should use
# phpDocumentor
# echo "=> Generating API docs..."
#
# if [ ! -d /usr/lib/graphviz ]
# then
# echo "=> [ERROR] Please install GraphViz. Aborting!"
# exit 1
# fi
#
# phpdoc="vendor/bin/phpdoc"
# $phpdoc -q -t .deb/apidocs -d app --title="$project_name $version"
#
# # Copy API docs
# cp -r .deb/apidocs pkg-debian/usr/share/doc/clidesc/

# formerly using fakeroot
chmod 0744 pkg-debian/usr/bin/clidesc

# Now there's a "pkg-debian" dir right here...
echo "=> Generating final package..."
dpkg -b pkg-debian/ CliDESC_$version.deb > /dev/null

echo "=> Cleaning up..."
rm $downloaded_as

if [ $? -eq 0 ]
then
	echo "=> Debian Package created OK."
	echo "=> Done!"
	exit 0
fi

# Finish through fakeroot so we can adjust ownerships without needing to be root
#fakeroot ./finish_package.sh pkg-debian .
