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

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

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

[ -n "$ARTIFACT_ROOT" ] || die "--artifact-root is required"
mkdir -p "$ARTIFACT_ROOT/os" "$ARTIFACT_ROOT/runtime" "$ARTIFACT_ROOT/code"

LNMP_SOURCE="$REPO_ROOT/work_binzhou_health_tech_vocational_college/deployment-packages/offline-assets/lnmp2.2-from-git-20260706.tar.gz"
LNMP_TARGET="$ARTIFACT_ROOT/runtime/lnmp2.2-from-git-20260706.tar.gz"
LNMP_SHA="9cdc130f859bfca6cbd138950128fda358b88fb1ebadad4f937ebc4560fe990b"
require_file "$LNMP_SOURCE"
verify_sha256 "$LNMP_SOURCE" "$LNMP_SHA"
if [ ! -f "$LNMP_TARGET" ]; then
  cp "$LNMP_SOURCE" "$LNMP_TARGET"
fi
verify_sha256 "$LNMP_TARGET" "$LNMP_SHA"
log "LNMP artifact ready: $LNMP_TARGET"

fetch_runtime_artifact() {
  local filename="$1"
  local url="$2"
  local expected_sha="$3"
  local target="$ARTIFACT_ROOT/runtime/$filename"
  if [ ! -f "$target" ]; then
    require_cmd curl
    curl -fL --retry 5 --connect-timeout 15 --output "$target" "$url"
  fi
  verify_sha256 "$target" "$expected_sha"
  log "runtime artifact ready: $target"
}

fetch_runtime_artifact \
  "redis-5.3.5.tgz" \
  "https://pecl.php.net/get/redis-5.3.5.tgz" \
  "d55fa5cc699198917ba2bdc827da632ad77f009ba2642d2750456a976dbe5989"
fetch_runtime_artifact \
  "Mosquitto-0.4.0.tgz" \
  "https://pecl.php.net/get/Mosquitto-0.4.0.tgz" \
  "eec599110f733afe5e0331a85d8feb354ec079b088bdca2dd81a587c5b50f8e4"
fetch_runtime_artifact \
  "supervisor-4.3.0-py2.py3-none-any.whl" \
  "https://files.pythonhosted.org/packages/0e/65/5e726c372da8a5e35022a94388b12252710aad0c2351699c3d76ae8dba78/supervisor-4.3.0-py2.py3-none-any.whl" \
  "0bcb763fddafba410f35cbde226aa7f8514b9fb82eb05a0c85f6588d1c13f8db"

if [ "$INCLUDE_OS" -eq 1 ]; then
  # Acquisition mirror can be overridden; the locked source identity and SHA256
  # remain the official openEuler release values in artifacts.lock.csv.
  OS_URL="${OPENEULER_MIRROR_URL:-https://repo.huaweicloud.com/openeuler/openEuler-24.03-LTS/ISO/x86_64/openEuler-24.03-LTS-x86_64-dvd.iso}"
  OS_TARGET="$ARTIFACT_ROOT/os/openEuler-24.03-LTS-x86_64-dvd.iso"
  OS_SHA="786b9683659512e71c978c34aea806a97ed6cacf04e1b0a22017a50eec582cbe"
  OS_READY=0
  if [ -f "$OS_TARGET" ] && [ "$(sha256_file "$OS_TARGET")" = "$OS_SHA" ]; then
    OS_READY=1
  fi
  if [ "$OS_READY" -eq 0 ]; then
    if command -v aria2c >/dev/null 2>&1; then
      if ! aria2c --async-dns=false -x 16 -s 16 -k 1M -c -d "$(dirname "$OS_TARGET")" -o "$(basename "$OS_TARGET")" "$OS_URL"; then
        log "aria2c download failed; falling back to curl"
        rm -f "$OS_TARGET.aria2"
        require_cmd curl
        curl -fL --continue-at - --retry 5 --output "$OS_TARGET" "$OS_URL"
      fi
    else
      require_cmd curl
      curl -fL --continue-at - --retry 5 --output "$OS_TARGET" "$OS_URL"
    fi
  fi
  verify_sha256 "$OS_TARGET" "$OS_SHA"
  log "openEuler ISO ready: $OS_TARGET"
else
  log "openEuler ISO not downloaded; rerun with --include-os-iso"
fi
