#!/bin/sh
#
# koha-remove -- Remove a Koha instance.
# Copyright 2010  Catalyst IT, Ltd
# 
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <https://www.gnu.org/licenses/>.


set -e

# include helper functions
if [ -f "/usr/share/koha/bin/koha-functions.sh" ]; then
    . "/usr/share/koha/bin/koha-functions.sh"
else
    echo "Error: /usr/share/koha/bin/koha-functions.sh not present." 1>&2
    exit 1
fi

args=$(getopt -l keep-mysql,purge-all -o kp -n $0 -- "$@")
eval set -- $args
while [ ! -z "$1" ]
do
    case "$1" in
         -k|--keep-mysql) keepmysql=1;;
         -p|--purge-all) purgeall=1;;
             # purgeall removes all instance files in var/lib/koha and var/spool/koha
         --) shift; break;;
          *) break;;
    esac
    shift
done

NAMES="$@"

SITECONFDIR="/etc/koha/sites"
# There has to be a better way of excluding '.' from find. But this works.
INSTANCES=$(get_instances)

if [ -z $NAMES ] ; then
    echo "Please specify a Koha instance name. Your choices are:"
    echo "$INSTANCES"
    exit 1
fi

for name in $NAMES
do
    # Does the directory (ie instance) name exist?
    if [ ! -d $SITECONFDIR/$name ] ; then
     echo Koha configuration directory for instance \"$name\" does not exist, please specify a valid Koha instance
  exit 1
    fi

    echo "Removing Koha instance $name"
    mysql_hostname="localhost"
    if [ "$keepmysql" != "1" ]
    then
    mysql --defaults-extra-file=/etc/mysql/koha-common.cnf <<eof
DROP USER IF EXISTS \`koha_$name\`@\`%\`;
DROP USER IF EXISTS \`koha_$name\`@\`$mysql_hostname\`;
DROP DATABASE IF EXISTS \`koha_$name\`;
FLUSH PRIVILEGES;
eof
    fi #`

    # Stop the Zebra server if needed
    if is_zebra_running $name; then
        koha-zebra --stop $name || /bin/true
    fi
    # Stop the indexer daemon if needed
    if is_indexer_running $name; then
        koha-indexer --stop $name || /bin/true
    fi
    # Stop the worker daemons if needed
    for queue in $(get_worker_queues); do
        if is_worker_running $name $queue; then
            koha-worker  --queue $queue --stop $name|| /bin/true
        fi
    done
    # Stop the Plack server if needed
    if is_plack_running $name; then
        koha-plack --stop $name || /bin/true
    fi
    # Stop the SIP server if needed
    if is_sip_running $name; then
        koha-sip --stop $name || /bin/true
    fi
    # Stop the ES indexing daemon if needed
    if is_es_indexer_running $name; then
        koha-es-indexer --stop $name || /bin/true
    fi

    instancefile=$(get_apache_config_for $name)
    le_opacdomain=$(letsencrypt_get_opacdomain_for $name)

    [ -f "$instancefile" ]  && \
        rm "$instancefile"
    [ -f "/etc/koha/sites/$name/koha-conf.xml" ] && \
        rm "/etc/koha/sites/$name/koha-conf.xml"
    [ -f "/etc/koha/sites/$name/log4perl.conf" ] && \
        rm "/etc/koha/sites/$name/log4perl.conf"
    [ -f "/etc/koha/sites/$name/zebra-biblios.cfg" ] && \
        rm "/etc/koha/sites/$name/zebra-biblios.cfg"
    [ -f "/etc/koha/sites/$name/zebra-biblios-dom.cfg" ] && \
        rm "/etc/koha/sites/$name/zebra-biblios-dom.cfg"
    [ -f "/etc/koha/sites/$name/zebra-authorities.cfg" ] && \
        rm "/etc/koha/sites/$name/zebra-authorities.cfg"
    [ -f "/etc/koha/sites/$name/zebra-authorities-dom.cfg" ] && \
        rm "/etc/koha/sites/$name/zebra-authorities-dom.cfg"
    [ -f "/etc/koha/sites/$name/zebra.passwd" ] && \
        rm "/etc/koha/sites/$name/zebra.passwd"

    tempdir=$(get_tmpdir)
    [ -d "$tempdir/koha_${name}_upload" ] && \
        # Temporary uploads can be discarded, apart from purgeall
        rm -r "$tempdir/koha_${name}_upload"

    [ -f "/var/lib/koha/$name/letsencrypt.enabled" ] && \
        rm -r "/var/lib/koha/$name/letsencrypt.enabled"
    [ -f "/etc/letsencrypt/renewal/$le_opacdomain.conf" ] && \
        rm -r "/etc/letsencrypt/renewal/$le_opacdomain.conf"
    # Maybe a user has left something in the config directory they want to keep? We won't delete it here, nor throw an error if the have.
    [ -d "/etc/koha/sites/$name" ] && \
        rmdir --ignore-fail-on-non-empty "/etc/koha/sites/$name"
    [ -d "/var/lock/koha/$name" ] && \
        rm -r "/var/lock/koha/$name"
    [ -d "/var/log/koha/$name" ] && \
        rm -r "/var/log/koha/$name"
    [ -d "/var/cache/koha/$name" ] && \
        rm -r "/var/cache/koha/$name"
    [ -d "/var/run/koha/$name" ] && \
        rm -r "/var/run/koha/$name"
    [ "$purgeall" = "1" ] && [ -d "/var/lib/koha/$name" ] && \
        rm -r "/var/lib/koha/$name"
    [ "$purgeall" = "1" ] && [ -d "/var/spool/koha/$name" ] && \
        rm -r "/var/spool/koha/$name"
    getent passwd "$name-koha" > /dev/null && deluser --quiet "$name-koha"
    # in case the site has already been disabled, we don't want to break the loop now.
    a2dissite "$name" > /dev/null 2>&1 || a2dissite "${name}.conf" > /dev/null 2>&1 || /bin/true
done

service apache2 restart
