#!/usr/bin/env sh
#
# trashman handles junky software installation procedures
#
# Copyright (C) 2017 Silvio Rhatto - rhatto at riseup.net
#
# 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 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 .
# Parameters
NAME="trashman"
PROGRAM="$0"
BASENAME="`basename $0`"
ACTION="$1"
CWD="`pwd`"
# Set shared files location
if [ -e "`dirname $(readlink -f $0)`/share/$NAME" ]; then
  # Development or local installation layout
  APP_BASE="`dirname $(readlink -f $0)`"
  LIB="$APP_BASE/share/$NAME"
  SHARE="$APP_BASE/share/$BASENAME"
else
  # System installation layout
  APP_BASE="`dirname $(readlink -f $0)`"
  LIB="$APP_BASE/../share/$NAME"
  SHARE="$APP_BASE/../share/$BASENAME"
fi
# Include basic functions
. $LIB/trashman/functions || exit 1
# Display usage
trashman_usage() {
  echo "$BASENAME: package ports tree and heterodox configuration provisioner"
  echo ""
  echo "usage: $BASENAME "
  if [ "$BASENAME" = "trashman" ]; then
    echo "usage: $BASENAME  "
  fi
  echo "usage: $BASENAME  [ ... ] [<--param1=value1> ... <--paramM=valueM>]"
  echo ""
  echo "available packages:"
  echo ""
  for package in `trashman_implementations`; do
    if [ -e "$SHARE/$package/info" ]; then
      echo "\t $package: `cat $SHARE/$package/info` (`trashman_actions $package | sed -e 's/ /|/g'`)"
    fi
  done
  echo ""
  exit 1
}
# Dispatch
if [ -z "$ACTION" ]; then
  trashman_usage
elif [ "$ACTION" = "fetch" ]; then
  trashman_$ACTION
elif [ "$ACTION" = "merge" ]; then
  trashman_$ACTION
elif [ "$ACTION" = "deploy" ]; then
  trashman_$ACTION $*
elif [ "$ACTION" = "version" ]; then
  trashman_$ACTION
else
  # Get packages param
  shift
  PACKAGES="$*"
  # Setup packages
  if [ -z "$PACKAGES" ]; then
    trashman_usage
  else
    for package in $PACKAGES; do
      if [ ! -z "`trashman_actions $package`" ]; then
        folder="`trashman_actions_folder $package`"
        # Checking for privileges
        if [ "$BASENAME" = "trashman" ]; then
          trashman_check_root $ACTION $package
        else
          trashman_check_sudo
        fi
        if [ -x "$SHARE/$package/$folder/$ACTION" ]; then
          if [ "$ACTION" != "check" ] && [ "$ACTION" != "test" ]; then
            trashman_echo "Issuing action $ACTION for $package ($folder)..."
          fi
          # Run action for package
          $SHARE/$package/$folder/$ACTION $SHARE $LIB
          trashman_check_exit_status $ACTION $?
        else
          trashman_echo "No such action $ACTION for package $package, skipping"
        fi
      else
        trashman_echo "No such package $package, skipping"
      fi
    done
    # Exit with the latest return status
    exit $status
  fi
fi