#!/bin/bash

##- Creates a new XpTracker in a given TWiki instance.
##: wiki aname asurname alogin amail cname csurname clogin cmail project [key value...]
##+ wiki       Name of the wiki instance to add the XpTracker to
##+ aname      Wiki administrator name
##+ asurname   Wiki administrator surname
##+ alogin     Wiki administrator login identifier
##+ amail      Wiki administrator e-mail address
##+ cname      Wiki customer name
##+ csurname   Wiki customer surname
##+ clogin     Wiki customer login identifier
##+ cmail      Wiki customer e-mail address
##+ project    Wiki name of the project

[ "${__twa_bindir}" ] || exec "$(dirname "$0")/twiki-admin" xpcreate "$@"
[[ $# -ge 10 ]] || __twa_usage_and_exit

__twa_run_locked
__twa_config "$1"


# This is an example of how variables may look like for a wiki
#-------------------------------------------------------------
# WIKI_NAME=foowiki
#
# ADMIN_NAME="Mr"
# ADMIN_SURNAME="Proper"
# ADMIN_USERID="mrproper"
# ADMIN_EMAIL="${ADMIN_USERID}@yourdomain.com"
# ADMIN_WIKINAME="${ADMIN_NAME}${ADMIN_SURNAME}"
#
# CUSTOMER_NAME="Mr"
# CUSTOMER_SURNAME="Customer"
# CUSTOMER_USERID="mrcustomer"
# CUSTOMER_EMAIL="${CUSTOMER_USERID}@somedomain.com"
# CUSTOMER_WIKINAME="${CUSTOMER_NAME}${CUSTOMER_SURNAME}"
#
# PROJECT_NAME="FunkyProject"
# PROJECT_WIKINAME="${PROJECT_NAME}"
# PROJECT_ADMIN_WIKINAME="${PROJECT_NAME}Admin"
# PROJECT_USERS_GROUP="${PROJECT_NAME}Group"
# PROJECT_ADMIN_GROUP="${PROJECT_ADMIN_WIKINAME}Group"


WIKI_NAME=$1

ADMIN_NAME=$2
ADMIN_SURNAME=$3
ADMIN_USERID=$4
ADMIN_EMAIL=$5
ADMIN_WIKINAME="${ADMIN_NAME}${ADMIN_SURNAME}"

CUSTOMER_NAME=$6
CUSTOMER_SURNAME=$7
CUSTOMER_USERID=$8
CUSTOMER_EMAIL=$9
CUSTOMER_WIKINAME="${CUSTOMER_NAME}${CUSTOMER_SURNAME}"

PROJECT_NAME=${10}
PROJECT_WIKINAME="${PROJECT_NAME}"
PROJECT_ADMIN_WIKINAME="${PROJECT_NAME}Admin"
PROJECT_USERS_GROUP="${PROJECT_NAME}Group"
PROJECT_ADMIN_GROUP="${PROJECT_ADMIN_WIKINAME}Group"


WWWPATH=${cfg_www_root}
TEMPLATE_PATH="${cfg_template}/data/${cfg_var_prefix}_PROJECT_WIKINAME"
instance_path="${cfg_www_root}/${cfg_dir_prefix}$1"
RESULT_PATH="${instance_path}/data/${PROJECT_WIKINAME}"


# We need null-globbing to avoid errors when some files do not exist
shopt -s nullglob


if [[ ! -d ${instance_path} ]] || \
   [ ! -x "${instance_path}/bin/configure" ] || \
   [ ! -d "${instance_path}/lib/TWiki" ]
then
	__twa_die "No TWiki instance at '${instance_path}'"
fi

if [[ -d ${RESULT_PATH} ]] ; then
	__twa_die "Directory '${RESULT_PATH}' already exists"
fi


__twa_info "Copying data"
__twa_do cp -r "${TEMPLATE_PATH}" "${RESULT_PATH}"

__twa_do cd "${RESULT_PATH}"
__twa_info "Modifying templates"


page_edit_sed="
s/${cfg_var_prefix}_ADMIN_NAME/${ADMIN_NAME}/g
s/${cfg_var_prefix}_ADMIN_SURNAME/${ADMIN_SURNAME}/g
s/${cfg_var_prefix}_ADMIN_EMAIL/${ADMIN_EMAIL}/g
s/${cfg_var_prefix}_ADMIN_WIKINAME/${ADMIN_WIKINAME}/g
s/${cfg_var_prefix}_ADMIN_USERID/${ADMIN_USERID}/g
s/${cfg_var_prefix}_CUSTOMER_NAME/${CUSTOMER_NAME}/g
s/${cfg_var_prefix}_CUSTOMER_SURNAME/${CUSTOMER_SURNAME}/g
s/${cfg_var_prefix}_CUSTOMER_EMAIL/${CUSTOMER_EMAIL}/g
s/${cfg_var_prefix}_CUSTOMER_WIKINAME/${CUSTOMER_WIKINAME}/g
s/${cfg_var_prefix}_CUSTOMER_USERID/${CUSTOMER_USERID}/g
s/${cfg_var_prefix}_NAME/${WIKI_NAME}/g
s/${cfg_var_prefix}_PROJECT_WIKINAME/${PROJECT_WIKINAME}/g
s/${cfg_var_prefix}_PROJECT_NAME/${PROJECT_NAME}/g
"
declare -r page_edit_sed


while read -r FILENAME ; do
	__twa_info "Editing '${FILENAME}'"
	__twa_do sed -e "${page_edit_sed}" -i "${FILENAME}"
done < <( find . -exec grep -q "${cfg_var_prefix}_" {} \; -print )


TEMPLATE_PATH="${cfg_template}/data/${cfg_var_prefix}_PROJECT_ADMIN_WIKINAME"
RESULT_PATH="${instance_path}/data/${PROJECT_ADMIN_WIKINAME}"


if [[ -d ${RESULT_PATH} ]] ; then
	__twa_die "Directory '${RESULT_PATH}' already exists"
fi


__twa_info echo "Copying: ${TEMPLATE_PATH} -> ${RESULT_PATH}"
__twa_do cp -r "${TEMPLATE_PATH}" "${RESULT_PATH}"
__twa_do cd "${RESULT_PATH}"


while read -r FILENAME ; do
	__twa_info "Modifying '${FILENAME}'"
	__twa_do sed -e "${page_edit_sed}" -i "${FILENAME}"
done < <( find . -exec grep -q "${cfg_var_prefix}_" {} \; -print )


if [ -d "${cfg_template}/pub/${cfg_var_prefix}_PROJECT_ADMIN_NAME" ]
then
	__twa_do cp -R \
		"${cfg_template}/pub/${cfg_var_prefix}_PROJECT_ADMIN_NAME" \
		"${instance_path}/pub/${PROJECT_ADMIN_WIKINAME}"
fi

if [ -d "${cfg_template}/pub/${cfg_var_prefix}_PROJECT_WIKINAME" ]
then
	__twa_do cp -R \
		"${cfg_template}/pub/${cfg_var_prefix}_PROJECT_WIKINAME" \
		"${instance_path}/pub/${PROJECT_WIKINAME}"
fi

__twa_info "Renaming pages"
__twa_do cd "${instance_path}/data/${PROJECT_WIKINAME}"
for i in *${cfg_var_prefix}_PROJECT_WIKINAME* ; do
  __twa_do mv "$i" "${i//${cfg_var_prefix}_PROJECT_WIKINAME/${PROJECT_WIKINAME}}"
done


__twa_do mkdir -p "${instance_path}/pub/${PROJECT_WIKINAME}"
__twa_do mkdir -p "${instance_path}/pub/${PROJECT_ADMIN_WIKINAME}"

__twa_info "Adjusting permissions"
__twa_do chown -R "${cfg_dir_owner}" "${RESULT_PATH}" \
	"${instance_path}/pub/${PROJECT_ADMIN_WIKINAME}" \
	"${instance_path}/pub/${PROJECT_WIKINAME}"
