#!/bin/bash

set -euxo pipefail

# Usage: docker-run [backend|frontend] command

# localdev path
DIR="$(dirname "$0")"

function getLocalCacheDir() {
    local command="$1"
    local fallback="$2"

    output=$($command 2>/dev/null)
    variable=$([ $? -eq 0 ] && echo "$output" || echo "$fallback")

    echo "$variable"
}
CACHE_CMD_BACKEND="echo $HOME/.gradle"
CACHE_CMD_FRONTEND="npm config get cache"

case $1 in
  backend)
    IMAGE="githubing-backend"
    CACHE_VOLUME="$(getLocalCacheDir "$CACHE_CMD_BACKEND" "$HOME/.cache/composer"):$(docker run --rm $IMAGE $CACHE_CMD_BACKEND)"
    ;;
  frontend)
    IMAGE="githubing-node"
    CACHE_VOLUME="$(getLocalCacheDir "$CACHE_CMD_FRONTEND" "$HOME/.cache/pnpm"):$(docker run --rm $IMAGE $CACHE_CMD_FRONTEND)"
    ;;
  *)
    echo "Invalid first argument. Supported: backend|frontend"
    exit 1
    ;;
esac

# Absolute path of frontend or backend
DIR="$(readlink -f "$DIR"/../../$1)"

shift

docker run \
  --rm \
  --volume "$DIR:/app:delegated" \
  --volume "$CACHE_VOLUME:delegated" \
  --workdir=/app \
  $IMAGE \
  "$@"
