#!/bin/sh
# Author Xiaobao(xiaobao@linkease.com)

ACTION=${1}
WRLOCK=/var/lock/nextcloud.lock
LOGFILE=/var/log/nextcloud.log
LOGEND="XU6J03M6"
shift 1

IMAGE_NAME='nextcloud'

check_params() {

  if [ -z "${WRLOCK}" ]; then
    echo "lock file not found"
    exit 1
  fi

  if [ -z "${LOGFILE}" ]; then
    echo "logger file not found"
    exit 1
  fi

}

lock_run() {
  local lock="$WRLOCK"
  exec 300>$lock
  flock -n 300 || return
  do_run
  flock -u 300
  return
}

run_action() {
  if check_params; then
    lock_run
  fi
}

do_install() {
  echo "docker pull ${IMAGE_NAME}" >${LOGFILE}
  docker pull ${IMAGE_NAME} >>${LOGFILE} 2>&1
  docker rm -f nextcloud

  local port=`uci get nextcloud.@nextcloud[0].port 2>/dev/null`
  if [ -z "${port}" ]; then 
    port=8082
  fi

  local mntv="/mnt:/mnt"
  mountpoint -q /mnt && mntv="$mntv:rslave"

  docker run -d \
    --name nextcloud \
    --dns=172.17.0.1 \
    --restart=unless-stopped \
    -p ${port}:80 \
    -v /mnt:/mnt:rslave \
    -e TZ="Asia/Shanghai" \
    ${IMAGE_NAME} >>${LOGFILE} 2>&1

  RET=$?
  if [ "${RET}" = "0" ]; then
    # mark END, remove the log file
    echo ${LOGEND} >> ${LOGFILE}
    sleep 5
    rm -f ${LOGFILE}
  else
    # reserve the log
    echo "docker run ${IMAGE_NAME} failed" >>${LOGFILE}
    echo ${LOGEND} >> ${LOGFILE}
  fi
  exit ${RET}
}

# run in lock
do_run() {
  case ${ACTION} in
    "install")
      do_install
    ;;
    "upgrade")
      do_install
    ;;
  esac
}

usage() {
  echo "usage: nextcloud sub-command"
  echo "where sub-command is one of:"
  echo "      install                Install the nextcloud"
  echo "      upgrade                Upgrade the nextcloud"
  echo "      remove                 Remove the nextcloud"
}

case ${ACTION} in
  "install")
    run_action
  ;;
  "upgrade")
    run_action
  ;;
  "remove")
    docker rm -f nextcloud
  ;;
  *)
    usage
  ;;
esac