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

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

PROJECT_ENV=""
SECRETS_ENV=""
while [ "$#" -gt 0 ]; do
  case "$1" in
    --project-env) PROJECT_ENV="$2"; shift 2 ;;
    --secrets-env) SECRETS_ENV="$2"; shift 2 ;;
    *) die "unknown argument: $1" ;;
  esac
done

[ -n "$PROJECT_ENV" ] || die "--project-env is required"
load_env_file "$PROJECT_ENV"
assert_no_placeholders "$PROJECT_ENV"

if [ -n "$SECRETS_ENV" ]; then
  require_secret_permissions "$SECRETS_ENV"
  assert_no_placeholders "$SECRETS_ENV"
fi

FAILURES=0
check() {
  local label="$1"
  shift
  if "$@"; then
    printf 'PASS\t%s\n' "$label"
  else
    printf 'FAIL\t%s\n' "$label"
    FAILURES=$((FAILURES + 1))
  fi
}

check "architecture=${CPU_ARCH}" test "$(uname -m)" = "$CPU_ARCH"
check "disk_free_ge_100GiB" bash -c "[ \"\$(df -Pk / | awk 'NR==2 {print \$4}')\" -ge 104857600 ]"
check "mqtt_dns" getent hosts "$ALIYUN_MQTT_ENDPOINT"
check "mqtt_tcp_${ALIYUN_MQTT_PORT}" network_tcp_check "$ALIYUN_MQTT_ENDPOINT" "$ALIYUN_MQTT_PORT"
check "baidu_https" curl -sS --connect-timeout 5 --max-time 10 -o /dev/null "$BAIDU_FACE_API_BASE/"
check "oss_https" curl -sS --connect-timeout 5 --max-time 10 -o /dev/null "$ALIYUN_OSS_PUBLIC_HOST"

if [ -f /etc/os-release ]; then
  if grep -qi 'openEuler' /etc/os-release; then
    printf 'PASS\tos_openEuler\n'
  else
    printf 'FAIL\tos_openEuler\n'
    FAILURES=$((FAILURES + 1))
  fi
else
  printf 'FAIL\tos_release_missing\n'
  FAILURES=$((FAILURES + 1))
fi

if [ "${ALLOW_EOL_RUNTIME:-false}" = "true" ]; then
  printf 'PASS\teol_runtime_exception_confirmed\n'
else
  printf 'FAIL\teol_runtime_exception_missing_for_mysql56_php73_php74\n'
  FAILURES=$((FAILURES + 1))
fi

printf 'FAIL_COUNT=%s\n' "$FAILURES"
[ "$FAILURES" -eq 0 ]
