#!/bin/sh

set -eu

get_puavo_pkg_attribute() {
  field=$1
  installer=$2

  attr_value=$(
    tar --wildcards -Ozx -f "$installer" '*/.puavo-pkg-version' \
      | awk -v field="$field" '$1 == field { print $2 }') || true

  if [ -z "$attr_value" ]; then
    echo "Could not lookup '$field' for '${installer}'" >&2
    return 1
  fi

  echo "$attr_value"
}

copy_pkg_to_repo() {
  puavo_pkg_path=$1

  puavo_pkg=$(basename "$puavo_pkg_path" .tar.gz)                  || return 1
  pkg_id=$(get_puavo_pkg_attribute package-id "$puavo_pkg_path")   || return 1
  pkg_version=$(get_puavo_pkg_attribute version "$puavo_pkg_path") || return 1

  pkg_dir="${target_dir}/${puavo_pkg}"
  pkg_file="${pkg_id}.tar.gz.gpg"
  repo_pkg_path="${pkg_dir}/${pkg_file}"

  mkdir -p "$pkg_dir" || return 1
  if [ ! -e "$repo_pkg_path" ]; then
    gpg --homedir "$gnupg_dir" --sign \
      --output "$repo_pkg_path" "$puavo_pkg_path" || return 1
  fi

  ln -fns "$pkg_file" "${pkg_dir}/version-${pkg_version}.tar.gz.gpg" || return 1
  ln -fns "$pkg_file" "${pkg_dir}/latest.tar.gz.gpg"                 || return 1

  return 0
}

status=0

puavo_pkg_packages_path=${1:-}
target_dir=${2:-}
gnupg_dir=${3:-}

if [ ! -d "$puavo_pkg_packages_path" -o -z "$target_dir" -o ! -d "$gnupg_dir" ]; then
  echo "Usage: $(basename "$0") puavo_packages_dir target_dir gnupg_dir" >&2
  exit 1
fi

for puavo_pkg_path in ${puavo_pkg_packages_path}/*.tar.gz; do
  test -e "$puavo_pkg_path" || continue
  copy_pkg_to_repo "$puavo_pkg_path" || status=1
done

exit $status
