#!/bin/bash
# ==========================================================================
# Copyright (c) Fabasoft R&D GmbH, A-4020 Linz, 1988-2025.
#
# Alle Rechte vorbehalten. Alle verwendeten Hard- und Softwarenamen sind
# Handelsnamen und/oder Marken der jeweiligen Hersteller.
#
# Der Nutzer des Computerprogramms anerkennt, dass der oben stehende
# Copyright-Vermerk im Sinn des Welturheberrechtsabkommens an der vom
# Urheber festgelegten Stelle in der Funktion des Computerprogramms
# angebracht bleibt, um den Vorbehalt des Urheberrechtes genuegend zum
# Ausdruck zu bringen. Dieser Urheberrechtsvermerk darf weder vom Kunden,
# Nutzer und/oder von Dritten entfernt, veraendert oder disloziert werden.
# --------------------------------------------------------------------------
# Fabasoft Folio Uninstallation
# ==========================================================================

SCRIPTNAME=`basename $0`
PROG="Fabasoft Folio Uninstallation"
COPYRIGHT="Copyright (c) Fabasoft R&D GmbH, A-4020 Linz, 1988-2025."

SELF="/opt/fabasoft/sbin/uninstall"
FSCMGMT="/opt/fabasoft/bin/fscmgmt"
FSCINSTALL="/opt/fabasoft/sbin/fscinstall"
FSC="/etc/init.d/fsc"
WATCHERD="/etc/init.d/watcherd"

# --------------------------------------------------------------------------

function versionInfo()
{
  message "\n${PROG}\n${COPYRIGHT}\n"
}

# --------------------------------------------------------------------------

function uninstall()
{
  local ret=0

  if [ -z "$1" ]; then
    CURRENTUID=$(id -u)
    if [ ${CURRENTUID} -ne 0 ]; then
      echo "Superuser privileges are required for this command"
      echo "Switching to superuser"
      su -mc "${SELF}"
      ret=$?
      if [ ${ret} -ne 0 ]; then
        echo "Error: Failed to execute command"
      fi
      exit ${ret}
    fi

    if [ ! -d /tmp ]; then
      ret=1
      echo "Error: Temporary directory '/tmp' does not exist"
    fi
    
    if [ ${ret} -eq 0 ]; then
      cp -af ${SELF} /tmp
      ret=$?
      if [ ${ret} -ne 0 ]; then
        echo "Error: Copying data to temporary directory '/tmp' failed"
      fi
    fi

    if [ ${ret} -eq 0 ]; then
      chmod +x /tmp/uninstall
      exec /tmp/uninstall execute
    fi
  fi

  cd /tmp

  if [ -f ${FSCMGMT} -a -f ${FSCINSTALL} ]; then
    echo "Starting COO Management service"
    ${FSCMGMT} start COOManagement

    if [ ${ret} -eq 0 ]; then
      ${FSCINSTALL} -host localhost -port 17999 -disableclustersupport
      ret=$?
      if [ ${ret} -ne 0 ]; then
        echo "Error: Disabling cluster support failed"
      fi
      
      ${FSCINSTALL} -host localhost -port 17999 -deletedomain
      ret=$?
      if [ ${ret} -ne 0 ]; then
        echo "Error: Deleting domains failed"
      fi
    fi
  fi

  if [ ${ret} -eq 0 ]; then
    if [ -f ${FSCMGMT} -o -f ${FSC} -o -f ${WATCHERD} ]; then
      echo "Stopping services"
    fi

    if [ -f ${FSC} ]; then
      ${FSC} stop
    fi

    if [ -f ${WATCHERD} ]; then
      ${WATCHERD} stop
    fi
  fi

  if [ ${ret} -eq 0 ]; then
    if [ -d "/var/opt/fabasoft/lib/mmc" ]; then
      total=$(du -sh /var/opt/fabasoft/lib/mmc 2>/dev/null | awk '{ print $1 }')
      if [ $? -eq 0 ]; then
        total=" (${total})"
      else
        total=
      fi

      echo "Removing MMC areas in '/var/opt/fabasoft/lib/mmc'${total}"
      rm -rf /var/opt/fabasoft/lib/mmc/*
    fi
  fi

  if [ ${ret} -eq 0 ]; then
    rpms=$(rpm -qa --queryformat '%{NAME}|vendor %{VENDOR}\n' | grep '^fsc-[^|]*|vendor Fabasoft R&D' | awk '-F|' '{ print $1 }')
    sortedrpms=

    if [ $? -eq 0 ]; then
      for rpm in ${rpms}; do
        let order=0
        requiredbyrpms=$(rpm -q --whatrequires ${rpm} --queryformat '%{NAME}\n')

        if [ $? -eq 0 ]; then
          for requiredbyrpm in ${requiredbyrpms}; do 
            let order=${order}+1
          done
        fi

        sortedrpms="${sortedrpms}${order} ${rpm}|"
        sortedrpms="${sortedrpms}${order} z-newtransaction|"
      done
    fi

    if [ ! -z "${sortedrpms}" ]; then
      sortedrpms=$(echo -n "${sortedrpms}" | tr '|' '\n' | sort -k 1n -k 2b | awk '{ print $2 }')

      transaction=
      for rpm in ${sortedrpms}; do
        if [ "${rpm}" != "z-newtransaction" ]; then
          transaction="${transaction} ${rpm}"
        else
          if [ ! -z "${transaction}" ]; then
            echo "Uninstalling RPM packages: ${transaction}"

            rpm -e ${transaction}
            ret=$?
            if [ ${ret} -ne 0 ]; then
              echo "Error: Uninstalling RPM packages failed"
              break
            fi
            transaction=
          fi
        fi
      done
    fi
  fi

  if [ ${ret} -eq 0 ]; then
    if [ -d /tmp/Fabasoft ]; then
      echo "Removing temporary data in '/tmp/Fabasoft'"
      rm -rf /tmp/Fabasoft
    fi

    if [ -d /opt/fabasoft ]; then
      echo "Removing software package in '/opt/fabasoft'"
      rm -rf /opt/fabasoft
    fi

    if [ -d /etc/fabasoft ]; then
      echo "Removing configuration in '/etc/fabasoft'"
      rm -rf /etc/fabasoft
    fi

    if [ -d /var/opt/fabasoft ]; then
      echo "Removing variable data in '/var/opt/fabasoft'"
      rm -rf /var/opt/fabasoft
    fi
    rm -f /var/lock/subsys/watcherd
    rm -f /var/lock/subsys/fsc
  fi

  if [ -f /tmp/uninstall ]; then
    rm -f /tmp/uninstall
  fi

  return ${ret}
}

# --------------------------------------------------------------------------

function showHelp()
{
cat << ENDHELP

${PROG}
${COPYRIGHT}

${SCRIPTNAME}
ENDHELP
}

# --------------------------------------------------------------------------
# entry point
# --------------------------------------------------------------------------
 
if [ "$1" == "--help" ]; then
  showHelp
  exit 1
else
  uninstall $1
  exit $?
fi 
