#!/bin/sh -e
#
# Copyright (c) 2013 Robert Nelson <robertcnelson@gmail.com>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.

system=$(uname -n)
HOST_ARCH=$(uname -m)
TIME=$(date +%Y-%m-%d)

OIB_DIR="$( cd "$(dirname "$0")" ; pwd -P )" 
DIR="$PWD"
mkdir -p ${DIR}/ignore


if [ -f ${DIR}/.project ] ; then
	. ${DIR}/.project
fi

generic_git () {
	if [ ! -f ${DIR}/git/${git_project_name}/.git/config ] ; then
		git clone ${git_clone_address} ${DIR}/git/${git_project_name}
	fi
}

update_git () {
	if [ -f ${DIR}/git/${git_project_name}/.git/config ] ; then
		cd ${DIR}/git/${git_project_name}/
		git pull --rebase || true
		cd -
	fi
}

git_trees () {
	if [ ! -d ${DIR}/git/ ] ; then
		mkdir -p ${DIR}/git/
	fi

	git_project_name="linux-firmware"
	git_clone_address="https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git"
	generic_git
	update_git

	git_project_name="mt7601u"
	git_clone_address="https://github.com/rcn-ee/mt7601u"
	generic_git
	update_git
}

run_roostock_ng () {
	if [ ! -f ${DIR}/.project ] ; then
		echo "error: [.project] file not defined"
		exit 1
	else
		echo "Debug: .project"
		echo "-----------------------------"
		cat ${DIR}/.project
		echo "-----------------------------"
	fi

	if [ ! "${tempdir}" ] ; then
		tempdir=$(mktemp -d -p ${DIR}/ignore)
		echo "tempdir=\"${tempdir}\"" >> ${DIR}/.project
	fi

	/bin/bash -e "${OIB_DIR}/scripts/install_dependencies.sh" || { exit 1 ; }
	/bin/sh -e "${OIB_DIR}/scripts/debootstrap.sh" || { exit 1 ; }
	/bin/sh -e "${OIB_DIR}/scripts/chroot.sh" || { exit 1 ; }
	sudo rm -rf ${tempdir}/ || true
}

checkparm () {
	if [ "$(echo $1|grep ^'\-')" ] ; then
		echo "E: Need an argument"
		usage
	fi
}

check_project_config () {

	if [ ! -d ${DIR}/ignore ] ; then
		mkdir -p ${DIR}/ignore
	fi
	tempdir=$(mktemp -d -p ${DIR}/ignore)

	time=$(date +%Y-%m-%d)

	#/config/${project_config}.conf
	unset leading_slash
	leading_slash=$(echo ${project_config} | grep "/" || unset leading_slash)
	if [ "${leading_slash}" ] ; then
		project_config=$(echo "${leading_slash##*/}")
	fi

	#${project_config}.conf
	project_config=$(echo ${project_config} | awk -F ".conf" '{print $1}')
	if [ -f ${DIR}/configs/${project_config}.conf ] ; then
		. ${DIR}/configs/${project_config}.conf
		export_filename="${deb_distribution}-${release}-${image_type}-${deb_arch}-${time}"

		# for automation
		echo "${export_filename}" > ${DIR}/latest_version

		echo "tempdir=\"${tempdir}\"" > ${DIR}/.project
		echo "time=\"${time}\"" >> ${DIR}/.project
		echo "export_filename=\"${export_filename}\"" >> ${DIR}/.project
		echo "#" >> ${DIR}/.project
		cat ${DIR}/configs/${project_config}.conf >> ${DIR}/.project
	else
		echo "Invalid *.conf"
		exit
	fi
}

check_saved_config () {

	if [ ! -d ${DIR}/ignore ] ; then
		mkdir -p ${DIR}/ignore
	fi
	tempdir=$(mktemp -d -p ${DIR}/ignore)

	if [ ! -f ${DIR}/.project ] ; then
		echo "Couldn't find .project"
		exit
	fi
}

git_trees

cd ${DIR}/

unset need_to_compress_rootfs
# parse commandline options
while [ ! -z "$1" ] ; do
	case $1 in
	-h|--help)
		usage
		;;
	-c|-C|--config)
		checkparm $2
		project_config="$2"
		check_project_config
		;;
	--saved-config)
		check_saved_config
		;;
	esac
	shift
done

run_roostock_ng

#
