#!/bin/bash

# Verify local sources as required by openSUSE:Factory project

MYVERSION="latest"
MYNAME=""
MYDIRNAME="package"
MYTARNAME="$(uuidgen).tar.gz"
MYNPMPARAM=()
MYNPMCMD="npm"
MYPATCH="$(uuidgen).patch"
MYPATCHLEVEL=1


MYNPMPARAM+=("--omit=dev" "--ignore-scripts")

while test $# -gt 0; do
  case $1 in
    *-outdir)
      # just dummy ...
      MYOUTDIR="$2"
      shift
    ;;
    *-version)
      # Version
      MYVERSION="$2"
      shift
    ;;
    *-name)
      # Package name
      MYNAME="$2"
      shift
    ;;
    *-tarname)
      # Package name
      MYTARNAME="$2"
      shift
    ;;
    *-dirname)
      # Package name
      MYDIRNAME="$2"
      shift
    ;;
    *-patch)
      # Package name
      MYPATCH="$2"
      shift
    ;;
    *-development)
      # Package name
      MYNPMPARAM=("--ignore-scripts")
      shift
    ;;
    *-npmcmd)
      # Package name
      MYNPMCMD="$2"
      shift
    ;;
    *-patchlevel)
      # Package name
      MYPATCHLEVEL="$2"
      shift
    ;;
    *)
      echo Unknown parameter $1.
      echo 'Usage: this service is not excepting parameters'
      exit 1
    ;;
  esac
  shift
done

if [ -z "${MYNAME}" ]
then
    echo 'Add name for package'
    exit 1
fi

if [ -z "$MYOUTDIR" ]; then
  echo "ERROR: no output directory is given via --outdir parameter!"
  exit 1
fi

SRC_DIR="$PWD"

cd "$MYOUTDIR"

for file in $(ls -1 -r ${SRC_DIR}/*.tgz ${SRC_DIR}/${MYTARNAME})
do
   MYPACKAGEVERSION=$(echo "${file}" | sed -e "s#.*-##" -e "s#\.tgz##" -e "s#\.tar\.gz##" -e "s#\.tar\.xz##")

   tar xf "${file}"
   cd "${MYDIRNAME}"

   if [ -f "${SRC_DIR}/${MYPATCH}" ]
   then
       echo "Apply patch: ${SRC_DIR}/${MYPATCH}"
       patch -p${MYPATCHLEVEL} -i "${SRC_DIR}/${MYPATCH}"
   fi


   MYRUNCMD=("${MYNPMCMD}" "install" "${MYNPMPARAM[@]}")

   "${MYRUNCMD[@]}"

   if [ "$?" -eq 0 ]
   then
     ls -1

     if [ -d node_modules ]
     then
        # if [ -d node_modules/.bin ]
        # then
        #   rm -rf node_modules/.bin
        # fi

        # Remove bindings
        if [ -d vendor ]
        then
           rm -rf vendor
        fi

        # Remove some stuff that is banned on OBS
        find node_modules -type f -name "*~" -exec rm "{}" \;
        find node_modules -type f -name "*.swp" -exec rm "{}" \;
        find node_modules -type f -name "*.bak" -exec rm "{}" \;
        find node_modules -type f -name "*.yml" -exec rm "{}" \;
        find node_modules -type f -name "*.md" -exec rm "{}" \;
        find node_modules -type f -name "*.h" -exec rm "{}" \;
        find node_modules -type f -name "*.c" -exec rm "{}" \;
        find node_modules -type f -name "*.cpp" -exec rm "{}" \;
        find node_modules -type f -name ".eslint*" -exec rm "{}" \;
        find node_modules -type f -name ".gitignore" -exec rm "{}" \;
        find node_modules -type f -name ".jshintrc" -exec rm "{}" \;
        find node_modules -type f -name ".npmignore" -exec rm "{}" \;
        find node_modules -type f -name ".jshint" -exec rm "{}" \;
        find node_modules -type d -name ".github" | xargs rm -rf
        find node_modules -type d -name ".gitlab" | xargs rm -rf

        /usr/lib/rpm/fdupes_wrapper node_modules

        tar --owner=root --group=root --create --xz --file "${SRC_DIR}/node_modules-${MYPACKAGEVERSION}.tar.xz" node_modules
        # rm -rf node_modules
     else
        echo "No deps can't create package"
     fi
   else
     echo "Can't find package ${MYNAME}@${MYVERSION}" >&2
     exit 1
   fi

   cd ..
   rm -rf "$MYDIRNAME"
done

exit 0
