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

if [[ $# -lt 1 || $# -gt 2 ]]; then
  echo "Usage: $0 <html-file> [object-name.html]" >&2
  exit 2
fi

HTML_FILE="$1"
OBJECT_NAME="${2:-$(basename "$HTML_FILE")}"

if [[ ! -f "$HTML_FILE" ]]; then
  echo "[oss-html] HTML file not found: $HTML_FILE" >&2
  exit 1
fi

case "$OBJECT_NAME" in
  *.html) ;;
  *)
    echo "[oss-html] object name must end with .html: $OBJECT_NAME" >&2
    exit 1
    ;;
esac

OSSUTIL_BIN="${OSSUTIL_BIN:-$HOME/.aliyun/ossutil}"
if [[ ! -x "$OSSUTIL_BIN" ]]; then
  OSSUTIL_BIN="$(command -v ossutil || true)"
fi
if [[ -z "$OSSUTIL_BIN" || ! -x "$OSSUTIL_BIN" ]]; then
  echo "[oss-html] ossutil not found. Expected $HOME/.aliyun/ossutil or ossutil in PATH." >&2
  exit 1
fi

ZHCT_OSS_BUCKET="${ZHCT_OSS_BUCKET:-yyangpt}"
ZHCT_OSS_REGION="${ZHCT_OSS_REGION:-cn-beijing}"
ZHCT_OSS_ENDPOINT="${ZHCT_OSS_ENDPOINT:-oss-cn-beijing.aliyuncs.com}"
ZHCT_OSS_PREFIX="${ZHCT_OSS_PREFIX:-public/ai-marketing-platform}"
ZHCT_OSS_PUBLIC_BASE="${ZHCT_OSS_PUBLIC_BASE:-https://img.kxunpt.cn/public/ai-marketing-platform}"
ALIYUN_CONFIG="${ALIYUN_CONFIG:-$HOME/.aliyun/config.json}"
ALIYUN_PROFILE="${ALIYUN_PROFILE:-ai-nutrition-audit}"
OSSUTIL_CONFIG="${OSSUTIL_CONFIG:-}"
ZHCT_OSS_DRY_RUN="${ZHCT_OSS_DRY_RUN:-0}"

TMP_CONFIG=""
cleanup() {
  if [[ -n "$TMP_CONFIG" && -f "$TMP_CONFIG" ]]; then
    rm -f "$TMP_CONFIG"
  fi
}
trap cleanup EXIT

if [[ -z "$OSSUTIL_CONFIG" ]]; then
  if [[ -f "$HOME/.ossutilconfig" ]]; then
    OSSUTIL_CONFIG="$HOME/.ossutilconfig"
  elif [[ -f "$ALIYUN_CONFIG" ]]; then
    TMP_CONFIG="$(mktemp "${TMPDIR:-/tmp}/zhct-ossutil.XXXXXX.conf")"
    chmod 600 "$TMP_CONFIG"
    python3 - "$ALIYUN_CONFIG" "$ALIYUN_PROFILE" "$TMP_CONFIG" <<'PY'
import json
import sys
from pathlib import Path

config_path, profile_name, output_path = sys.argv[1:4]
data = json.loads(Path(config_path).read_text())
profile = None
for item in data.get("profiles", []):
    if item.get("name") == profile_name:
        profile = item
        break
if not profile:
    raise SystemExit(f"Aliyun profile not found: {profile_name}")
if not profile.get("access_key_id") or not profile.get("access_key_secret"):
    raise SystemExit(f"Aliyun profile lacks AK credentials for ossutil: {profile_name}")
region = profile.get("region_id") or "cn-beijing"
content = (
    "[default]\n"
    f"accessKeyID={profile['access_key_id']}\n"
    f"accessKeySecret={profile['access_key_secret']}\n"
    f"region={region}\n"
)
Path(output_path).write_text(content)
PY
    OSSUTIL_CONFIG="$TMP_CONFIG"
  else
    echo "[oss-html] No OSS config found. Run scripts/restore-local-oss-config.sh or configure ossutil." >&2
    exit 1
  fi
fi

DEST="oss://${ZHCT_OSS_BUCKET}/${ZHCT_OSS_PREFIX%/}/${OBJECT_NAME}"
PUBLIC_URL="${ZHCT_OSS_PUBLIC_BASE%/}/${OBJECT_NAME}"

echo "[oss-html] upload: $HTML_FILE -> $DEST"
if [[ "$ZHCT_OSS_DRY_RUN" == "1" ]]; then
  echo "[oss-html] dry-run enabled; upload skipped"
  echo "$PUBLIC_URL"
  exit 0
fi

"$OSSUTIL_BIN" cp "$HTML_FILE" "$DEST" \
  --config-file "$OSSUTIL_CONFIG" \
  --region "$ZHCT_OSS_REGION" \
  --endpoint "$ZHCT_OSS_ENDPOINT" \
  --acl public-read \
  --content-type "text/html; charset=utf-8" \
  --content-disposition "inline" \
  --cache-control "no-cache" \
  --force

echo "[oss-html] verify: $PUBLIC_URL"
headers="$(curl -fsSI --max-time 20 "$PUBLIC_URL")"
printf '%s\n' "$headers"

printf '%s\n' "$headers" | grep -qi '^HTTP/.* 200' || {
  echo "[oss-html] public URL did not return 200: $PUBLIC_URL" >&2
  exit 1
}
printf '%s\n' "$headers" | grep -qi '^content-type: text/html' || {
  echo "[oss-html] public URL is not text/html: $PUBLIC_URL" >&2
  exit 1
}
if printf '%s\n' "$headers" | grep -qi '^content-disposition:'; then
  printf '%s\n' "$headers" | grep -qi '^content-disposition:.*inline' || {
    echo "[oss-html] content-disposition is not inline: $PUBLIC_URL" >&2
    exit 1
  }
fi

echo "$PUBLIC_URL"
