#!/bin/bash

prepare_rpmbuild() {
	PACKAGE="${1}"; shift

	SOURCES_DIR="${PACKAGER_RPM_DIR}/${PACKAGE}/SOURCES"
	SPECFILE="${PACKAGER_RPM_DIR}/${PACKAGE}/SPECS/${PACKAGE}.spec"
	SPECINFILE="${SPECFILE}.in"

	mkdir -p "${SOURCES_DIR}"
	pushd "${SOURCES_DIR}"

	case "${PACKAGE}" in
		jubatus )
			rm -rf jubatus
			git clone https://github.com/jubatus/jubatus.git jubatus
			pushd jubatus
			git checkout "${JUBATUS_CHECKOUT}"
			if [ "${JUBATUS_IS_SNAPSHOT}" = "yes" ]; then
				JUBATUS_CHECKOUT="$(git rev-parse HEAD)"
				JUBATUS_CHECKOUT_DATE="$(git log --pretty=format:'%ad' --date=short --max-count=1 HEAD | tr -d '-')"
				JUBATUS_RELEASE="${JUBATUS_RELEASE}.${JUBATUS_CHECKOUT_DATE}git${JUBATUS_CHECKOUT:0:6}"
			fi
			popd
			tar --create --gzip --exclude-vcs --file "jubatus-${JUBATUS_VERSION}.tar.gz" jubatus
			rm -rf jubatus

			spec_substitute "${SPECINFILE}" "${SPECFILE}" \
								JUBATUS_VERSION \
								JUBATUS_RELEASE
			;;
		jubatus-core )
			rm -rf jubatus_core
			git clone https://github.com/jubatus/jubatus_core.git jubatus-core
			pushd jubatus-core
			git checkout "${JUBATUS_CORE_CHECKOUT}"
			if [ "${JUBATUS_CORE_IS_SNAPSHOT}" = "yes" ]; then
				JUBATUS_CORE_CHECKOUT="$(git rev-parse HEAD)"
				JUBATUS_CORE_CHECKOUT_DATE="$(git log --pretty=format:'%ad' --date=short --max-count=1 HEAD | tr -d '-')"
				JUBATUS_CORE_RELEASE="${JUBATUS_CORE_RELEASE}.${JUBATUS_CORE_CHECKOUT_DATE}git${JUBATUS_CORE_CHECKOUT:0:6}"
			fi
			popd
			tar --create --gzip --exclude-vcs --file "jubatus-core-${JUBATUS_CORE_VERSION}.tar.gz" jubatus-core
			rm -rf jubatus-core

			spec_substitute "${SPECINFILE}" "${SPECFILE}" \
								JUBATUS_CORE_VERSION \
								JUBATUS_CORE_RELEASE
			;;
        jubadump )
            rm -rf jubadump
            git clone https://github.com/jubatus/jubadump.git jubadump
            pushd jubadump
			git checkout "${JUBADUMP_CHECKOUT}"
			if [ "${JUBADUMP_IS_SNAPSHOT}" = "yes" ]; then
				JUBADUMP_CHECKOUT="$(git rev-parse HEAD)"
				JUBADUMP_CHECKOUT_DATE="$(git log --pretty=format:'%ad' --date=short --max-count=1 HEAD | tr -d '-')"
				JUBADUMP_RELEASE="${JUBADUMP_RELEASE}.${JUBADUMP_CHECKOUT_DATE}git${JUBADUMP_CHECKOUT:0:6}"
			fi
			popd
			tar --create --gzip --exclude-vcs --file "jubadump-${JUBADUMP_VERSION}.tar.gz" jubadump
			rm -rf jubadump

			spec_substitute "${SPECINFILE}" "${SPECFILE}" \
								JUBADUMP_VERSION \
								JUBADUMP_RELEASE
			;;
		jubatus-client )
			spec_substitute "${SPECINFILE}" "${SPECFILE}" \
								JUBATUS_CLIENT_VERSION \
								JUBATUS_CLIENT_RELEASE \
								JUBATUS_CLIENT_ARCHIVE \
								JUBATUS_CLIENT_ARCHIVE_DIR
			;;
		jubatus-release )
			spec_substitute "${SPECINFILE}" "${SPECFILE}" \
								JUBATUS_RELEASE_VERSION \
								JUBATUS_RELEASE_RELEASE
			;;
		jubatus-mpio )
			rm -rf jubatus-mpio
			git clone https://github.com/jubatus/jubatus-mpio.git jubatus-mpio
			pushd jubatus-mpio
			git checkout "${JUBATUS_MPIO_CHECKOUT}"
			if [ "${JUBATUS_MPIO_IS_SNAPSHOT}" = "yes" ]; then
				JUBATUS_MPIO_CHECKOUT="$(git rev-parse HEAD)"
				JUBATUS_MPIO_CHECKOUT_DATE="$(git log --pretty=format:'%ad' --date=short --max-count=1 HEAD | tr -d '-')"
				JUBATUS_MPIO_RELEASE="1.${JUBATUS_MPIO_CHECKOUT_DATE}git${JUBATUS_MPIO_CHECKOUT:0:6}"
			fi
			popd
			tar --create --gzip --exclude-vcs --file "jubatus-mpio-${JUBATUS_MPIO_VERSION}.tar.gz" jubatus-mpio
			rm -rf jubatus-mpio

			spec_substitute "${SPECINFILE}" "${SPECFILE}" \
								JUBATUS_MPIO_VERSION \
								JUBATUS_MPIO_RELEASE
			;;
		jubatus-msgpack-rpc )
			rm -rf jubatus-msgpack-rpc
			git clone https://github.com/jubatus/jubatus-msgpack-rpc.git jubatus-msgpack-rpc
			pushd jubatus-msgpack-rpc
			git checkout "${JUBATUS_MSGPACK_RPC_CHECKOUT}"
			if [ "${JUBATUS_MSGPACK_RPC_IS_SNAPSHOT}" = "yes" ]; then
				JUBATUS_MSGPACK_RPC_CHECKOUT="$(git rev-parse HEAD)"
				JUBATUS_MSGPACK_RPC_CHECKOUT_DATE="$(git log --pretty=format:'%ad' --date=short --max-count=1 HEAD | tr -d '-')"
				JUBATUS_MSGPACK_RPC_RELEASE="1.${JUBATUS_MSGPACK_RPC_CHECKOUT_DATE}git${JUBATUS_MSGPACK_RPC_CHECKOUT:0:6}"
			fi
			popd
			tar --create --gzip --exclude-vcs --file "jubatus-msgpack-rpc-${JUBATUS_MSGPACK_RPC_VERSION}.tar.gz" jubatus-msgpack-rpc
			rm -rf jubatus-msgpack-rpc

			spec_substitute "${SPECINFILE}" "${SPECFILE}" \
								JUBATUS_MSGPACK_RPC_VERSION \
								JUBATUS_MSGPACK_RPC_RELEASE
			;;
		msgpack )
			spec_substitute "${SPECINFILE}" "${SPECFILE}" \
								MSGPACK_VERSION \
								MSGPACK_RELEASE
			;;
		zookeeper-client )
			spec_substitute "${SPECINFILE}" "${SPECFILE}" \
								ZOOKEEPER_VERSION \
								ZOOKEEPER_RELEASE
			;;
		apache-log4cxx )
			spec_substitute "${SPECINFILE}" "${SPECFILE}" \
								LOG4CXX_VERSION \
								LOG4CXX_RELEASE
			;;
		ux )
			spec_substitute "${SPECINFILE}" "${SPECFILE}" \
								UX_VERSION \
								UX_RELEASE
			;;
		mecab )
			spec_substitute "${SPECINFILE}" "${SPECFILE}" \
								MECAB_VERSION \
								MECAB_RELEASE
			;;
		mecab-ipadic )
			spec_substitute "${SPECINFILE}" "${SPECFILE}" \
								MECAB_IPADIC_VERSION \
								MECAB_IPADIC_RELEASE \
								MECAB_IPADIC_ARCHIVE \
								MECAB_IPADIC_ARCHIVE_DIR
			;;
		* )
			echo "Unknown package: "${PACKAGE}""
			return 1
	esac

	# Download Sources & Patches if the URL is provided in SPEC file
	spectool -g "${SPECFILE}"

	popd
}

spec_substitute() {
	SPECINFILE="${1}"; shift
	SPECFILE="${1}"; shift

	cp -a "${SPECINFILE}" "${SPECFILE}"
	for KEY in "${@}"; do
		VALUE="$(eval echo \$${KEY})"
		perl -pi -e "s|\@${KEY}\@|${VALUE}|g" "${SPECFILE}"
	done
}
