#!/bin/sh
set -f

log()
{
  echo "${1}"
}

log "Checking requirements..."
if [ -n $(which docker) ]; then
  log "> docker => installed"
else
  log "> docker => not installed"

  exit 1
fi

log "Preparing..."

NO_CPU_LIMIT=$(docker info 2>&1 | grep -E "No cpu cfs (quota|period)")

GROUP_ID=$(id -g `whoami`)
USER_ID=$(id -u `whoami`)

DEFAULT_VOLUME=$(cd ~ && pwd -P)"/easyepg"
DEFAULT_SOCKET=$(find ~/ -type s -name "xmltv.sock" 2> /dev/null)
DEFAULT_TIMEZONE="Europe/Berlin"
DEFAULT_FREQUENCY="0 2 * * *"
DEFAULT_UPDATE="no"
DEFAULT_REPO="sunsettrack4"
DEFAULT_BRANCH="master"
DEFAULT_TAG="latest"
DEFAULT_PACKAGES=""

if [ -z "${NO_CPU_LIMIT}" ]; then
  DEFAULT_CPU_LIMIT=$(docker info 2>&1 | grep -E "^ *CPUs: " | sed "s/^ *CPUs: //")
fi

read -p "Storage location [${DEFAULT_VOLUME}]: " VOLUME
while true; do
  if [ -n "${DEFAULT_SOCKET}" ]; then
    read -p "Use existing local xmltv.sock [Y/n]: " yn

    case ${yn} in
      [Nn]*)
        break
      ;;
      *)
        read -p "Socket location [${DEFAULT_SOCKET}]: " SOCKET
        break
      ;;
    esac
  else
    read -p "Use custom location/directory for xmltv.sock [y/N]: " yn

    case ${yn} in
      [Yy]*)
        read -p "Socket location [${DEFAULT_SOCKET}]: " SOCKET
        break
      ;;
      *)
        break
      ;;
    esac
  fi
done

if [ -n "${DEFAULT_CPU_LIMIT}" ]; then
  while true; do
    read -p "Limit CPU usage [y/N]: " yn

    case ${yn} in
      [Yy]*)
        read -p "CPU limit [${DEFAULT_CPU_LIMIT}]: " CPU_LIMIT
        break
      ;;
      *)
        break
      ;;
    esac
  done
fi
read -p "Timezone [${DEFAULT_TIMEZONE}]: " TIMEZONE
read -p "Cronjob frequency [${DEFAULT_FREQUENCY}]: " FREQUENCY

read -p "Easyepg git repo [${DEFAULT_REPO}]: " REPO
read -p "Easyepg git branch [${DEFAULT_BRANCH}]: " BRANCH

if [ -z "${BRANCH}" ] || [ "${BRANCH}" = "master" ]; then
  DEFAULT_UPDATE="yes"

  while true; do
    read -p "Autoupdate easyepg [Y/n]: " yn

    case ${yn} in
      [Nn]*)
        UPDATE="no"
        break
      ;;
      *)
        UPDATE="yes"
        break
      ;;
    esac
  done
fi

read -p "Easyepg.minimal docker tag [${DEFAULT_TAG}]: " TAG
read -p "Additional OS packages [${DEFAULT_PACKAGES}]: " PACKAGES

if [ -z "${VOLUME}" ]; then
  VOLUME=${DEFAULT_VOLUME}
fi

if [ -z "${SOCKET}" ]; then
  SOCKET=${DEFAULT_SOCKET}
fi

if [ -z "${CPU_LIMIT}" ]; then
  CPU_LIMIT=${DEFAULT_CPU_LIMIT}
fi

if [ -z "${TIMEZONE}" ]; then
  TIMEZONE=${DEFAULT_TIMEZONE}
fi

if [ -z "${FREQUENCY}" ]; then
  FREQUENCY=${DEFAULT_FREQUENCY}
fi

if [ -z "${UPDATE}" ]; then
  UPDATE=${DEFAULT_UPDATE}
fi

if [ -z "${REPO}" ]; then
  REPO=${DEFAULT_REPO}
fi

if [ -z "${BRANCH}" ]; then
  BRANCH=${DEFAULT_BRANCH}
fi

if [ -z "${TAG}" ]; then
  TAG=${DEFAULT_TAG}
fi

if [ -z "${PACKAGES}" ]; then
  PACKAGES=${DEFAULT_PACKAGES}
fi

if [ ! -d "${VOLUME}" ]; then
  mkdir -p ${VOLUME}
fi

if [ -z "${VOLUME}" ] || [ ! -d "${VOLUME}" ] || [ ! -w "${VOLUME}" ]; then
  log "Storage location incorrect"
  exit 1
fi

if [ ! -z "${SOCKET}" ]; then
  if [ ! -S "${SOCKET}" ] && [ ! -d "${SOCKET}" ]; then
    log "Socket location incorrect"
    exit 1
  fi
fi

# make paths absolute for docker
VOLUME=$(cd ${VOLUME} && pwd -P)

if [ ! -z "${SOCKET}" ]; then
  SOCKET=$(cd `dirname ${SOCKET}` && pwd -P)/$(basename ${SOCKET})
fi

log "Stopping container..."
docker ps --format "{{.Image}} {{.ID}}" | grep "qoopido/easyepg.minimal" | cut -d " " -f 2 | xargs -I {} docker stop {} > /dev/null

log "Removing old container..."
docker ps -a --format "{{.Image}} {{.ID}}" | grep "qoopido/easyepg.minimal" | cut -d " " -f 2 | xargs -I {} docker rm --force {} > /dev/null

log "Removing old image..."
docker images --format "{{.Repository}}:{{.Tag}}" | grep "qoopido/easyepg.minimal" | xargs -I {} docker rmi --force {} > /dev/null

log "Pulling new image..."
docker pull qoopido/easyepg.minimal:${TAG}

log "Creating new container..."

OPTIONS="--tmpfs /tmp --tmpfs /var/log -e USER_ID=\"${USER_ID}\" -e GROUP_ID=\"${GROUP_ID}\" -e TIMEZONE=\"${TIMEZONE}\" -e FREQUENCY=\"${FREQUENCY}\" -e UPDATE=\"${UPDATE}\" -e REPO=\"${REPO}\" -e BRANCH=\"${BRANCH}\" -e PACKAGES=\"${PACKAGES}\" -v ${VOLUME}:/easyepg"

if [ -n "${SOCKET}" ]; then
  if [ -S "${SOCKET}" ]; then
    OPTIONS="${OPTIONS} -v ${SOCKET}:/xmltv.sock"
  fi

  if [ -d "${SOCKET}" ]; then
    OPTIONS="${OPTIONS} -v ${SOCKET}:/xmltv"
  fi
fi

if [ -n "${CPU_LIMIT}" ]; then
  OPTIONS="${OPTIONS} --cpus ${CPU_LIMIT}"
fi

sh -c "docker create -l easyepg.minimal --name=easyepg.admin -e MODE=\"admin\" ${OPTIONS} qoopido/easyepg.minimal:${TAG} 1> /dev/null"
log "> easyepg.admin"

sh -c "docker create -l easyepg.minimal --name=easyepg.run -e MODE=\"run\" ${OPTIONS} qoopido/easyepg.minimal:${TAG} 1> /dev/null"
log "> easyepg.run"

sh -c "docker create -l easyepg.minimal --name=easyepg.cron -e MODE=\"cron\" --restart unless-stopped ${OPTIONS} qoopido/easyepg.minimal:${TAG} 1> /dev/null"
log "> easyepg.cron"

log "Finished!"

exit