#!/usr/bin/env bash
set -e

resolve_link() {
  $(type -p greadlink readlink | head -1) $1
}

abs_dirname() {
  local cwd="$(pwd)"
  local path="$1"

  while [ -n "$path" ]; do
    cd "${path%/*}" 2>/dev/null
    local name="${path##*/}"
    path="$(resolve_link "$name" || true)"
  done

  pwd
  cd "$cwd"
}

usage() {
  echo "usage: ruby-package unpack PACKAGE_FILE" >&2
  exit 1
}

package_file="$1"
if [ -z "$package_file" ]; then
  usage
fi

package_path="$(abs_dirname "$package_file")/${package_file##*/}"
if [ ! -f "$package_path" ]; then
  echo "error: file not found: $1" >&2
  exit 1
fi

root="${TMPDIR}/ruby-package.$$"
rm -fr "$root"
mkdir -p "$root"

cd "$root"
tar xzf "$package_path"

cd *
package_root="$(pwd)"
package_name="$(cat "$package_root"/metadata/package)"
package_name_with_platform="${package_root##*/}"

if [ "${package_name}.$(ruby-package platform)" != "$package_name_with_platform" ]; then
  echo "error: invalid package format" >&2
  exit 2
fi

echo "$package_root"
