#!/usr/bin/bash
[ ${BASH_VERSION%%.*} -ge 4 ] || exit 1

LANG=en_US.UTF-8
export LANG
SCRIPT=$(readlink -f $0)
WHERE=${SCRIPT%/*}
WHAT=${0##*/}

usage() {
  echo ""
  echo "usage: ${0##*/} --help | <host:/dir> "
  echo ""
}

usagelong() {
usage
cat << EOF
    <host:/dir> : scp like host + directory

                : without any parameter it does lists all fuse.sshfs mounts
    -h          : short help
    --help      : this longer help

EOF
}

[[ $1 =~ ^-h ]] && usage && exit 0
[[ $1 =~  ^--help ]] && usagelong && exit 0

MOUNTDIR=$(readlink -f ${HOME}/sshfs)

if [ $# -eq 0 ]; then
  mount | grep ${MOUNTDIR} | awk '/ type fuse.sshfs /''{ print $1 " " $2 " " $3 }' | sed "s|${MOUNTDIR}/|~/sshfs/|g"
  exit 0
fi

if [ ! -d "${MOUNTDIR}" ]; then
  echo "ERROR ${MOUNTDIR} needs to exist" >&2
  exit 1
fi

# version check
ver_ge() { [ "$1" = "`echo -e "$1\n$2" | sort -rV | head -n1`" ]; }
BIN_VER="$(sshfs -V | awk '/^SSHFS version /{ print $NF }')"
BIN_WANT="3.7.3"
if ver_ge $BIN_VER $BIN_WANT ; then 
  SSHFSOPT="compression=no,auto_cache,reconnect"
else
  SSHFSOPT="compression=no,nonempty,auto_cache,reconnect,workaround=all"
fi

# use last parameter (but not yet using additional parameter for sshfs)
MOUNT=${BASH_ARGV[0]}
# remove trailing slash
MOUNT=${MOUNT%/}
if [[ ${MOUNT} =~ ((.*)@)?([^:]+):\/?(.*) ]]; then
  FSSSH=${BASH_REMATCH[0]}
  FSHOST=${BASH_REMATCH[3]}
  FSDIR=${BASH_REMATCH[4]}
fi

if [ ! -d "${MOUNTDIR}/${FSHOST}/${FSDIR}" ]; then
  mkdir -p "${MOUNTDIR}/${FSHOST}/${FSDIR}" 2>/dev/null
  if [ $? -eq 0 ]; then
    CREATED=" (created)"
  else
    echo "failed to create ${MOUNTDIR}/${FSHOST}/${FSDIR}" >&2
    exit 1
  fi
fi

echo -e "checking ${MOUNT} ... \c" >&2
mount | grep -q "^${FSSSH} on ${MOUNTDIR}/${FSHOST}/${FSDIR} type fuse.sshfs "
if [ $? -eq 0 ]; then
  echo -e "already \c" >&2
else
  sshfs -o ${SSHFSOPT} ${FSSSH} ${MOUNTDIR}/${FSHOST}/${FSDIR} 2>/dev/null
  if [ $? -ne 0 ]; then
    echo "failed" >&2
    exit 1
  fi
fi
echo "mounted on ~/sshfs/${FSHOST}/${FSDIR}${CREATED}" >&2

if [ "$WHAT" = "_cdsshfs" ]; then
  echo ~/sshfs/${FSHOST}/${FSDIR}
fi
