#!/usr/bin/env bash
set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PACKAGE_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
source "$SCRIPT_DIR/lib/common.sh"

ARTIFACT_ROOT=""
OUTPUT_DIR="$PACKAGE_ROOT/dist"
INCLUDE_OS=0
while [ "$#" -gt 0 ]; do
  case "$1" in
    --artifact-root) ARTIFACT_ROOT="$2"; shift 2 ;;
    --output-dir) OUTPUT_DIR="$2"; shift 2 ;;
    --include-os-iso) INCLUDE_OS=1; shift ;;
    *) die "unknown argument: $1" ;;
  esac
done

[ -n "$ARTIFACT_ROOT" ] || die "--artifact-root is required"
VERSION="$(tr -d '\r\n' < "$PACKAGE_ROOT/VERSION")"
STAGING="$(mktemp -d)"
trap 'rm -rf "$STAGING"' EXIT
TARGET="$STAGING/zhct-${VERSION}"
mkdir -p "$TARGET/artifacts/os" "$TARGET/artifacts/runtime" "$TARGET/artifacts/code"

tar -C "$PACKAGE_ROOT" \
  --exclude='./artifacts' --exclude='./dist' --exclude='./evidence' \
  --exclude='__pycache__' --exclude='*.pyc' \
  -cf - . | tar -C "$TARGET" -xf -
mkdir -p "$TARGET/evidence"

LNMP="$ARTIFACT_ROOT/runtime/lnmp2.2-from-git-20260706.tar.gz"
verify_sha256 "$LNMP" "9cdc130f859bfca6cbd138950128fda358b88fb1ebadad4f937ebc4560fe990b"
cp "$LNMP" "$TARGET/artifacts/runtime/"
for runtime_spec in \
  "redis-5.3.5.tgz:d55fa5cc699198917ba2bdc827da632ad77f009ba2642d2750456a976dbe5989" \
  "Mosquitto-0.4.0.tgz:eec599110f733afe5e0331a85d8feb354ec079b088bdca2dd81a587c5b50f8e4" \
  "supervisor-4.3.0-py2.py3-none-any.whl:0bcb763fddafba410f35cbde226aa7f8514b9fb82eb05a0c85f6588d1c13f8db"
do
  runtime_file="${runtime_spec%%:*}"
  runtime_sha="${runtime_spec#*:}"
  verify_sha256 "$ARTIFACT_ROOT/runtime/$runtime_file" "$runtime_sha"
  cp "$ARTIFACT_ROOT/runtime/$runtime_file" "$TARGET/artifacts/runtime/"
done

if [ "$INCLUDE_OS" -eq 1 ]; then
  ISO="$ARTIFACT_ROOT/os/openEuler-24.03-LTS-x86_64-dvd.iso"
  verify_sha256 "$ISO" "786b9683659512e71c978c34aea806a97ed6cacf04e1b0a22017a50eec582cbe"
  cp "$ISO" "$TARGET/artifacts/os/"
fi

if find "$ARTIFACT_ROOT/code" -maxdepth 1 -type f -name '*.tgz' -print -quit | grep -q .; then
  cp "$ARTIFACT_ROOT"/code/*.tgz "$TARGET/artifacts/code/"
fi

find "$TARGET/scripts" "$TARGET/tools" -type f \( -name '*.sh' -o -name '*.py' \) -exec chmod 0755 {} +
mkdir -p "$OUTPUT_DIR"
if [ "$INCLUDE_OS" -eq 1 ]; then
  OUTPUT="$OUTPUT_DIR/zhct-${VERSION}-full.tar"
  tar -C "$STAGING" -cf "$OUTPUT" "$(basename "$TARGET")"
else
  OUTPUT="$OUTPUT_DIR/zhct-${VERSION}-control.tar.gz"
  tar -C "$STAGING" -czf "$OUTPUT" "$(basename "$TARGET")"
fi
printf '%s  %s\n' "$(sha256_file "$OUTPUT")" "$(basename "$OUTPUT")" > "$OUTPUT.sha256"
log "PACKAGE_READY output=$OUTPUT"
