#!/bin/bash
set -euo pipefail

addon_dir="${A4P_WPS_ADDON_DIR:-${HOME}/Library/Containers/com.kingsoft.wpsoffice.mac/Data/.kingsoft/wps/jsaddons}"
target="${addon_dir}/publish.xml"
mkdir -p "${addon_dir}"
tmp="$(mktemp "${addon_dir}/.publish.xml.ai4paper.XXXXXX")"
trap 'rm -f "${tmp}"' EXIT

entry='  <jspluginonline name="AI4PaperWriting" type="wps" url="https://ai4paper.pro/wps-addin/" install="https://ai4paper.pro/wps-addin/install.html" enable="true"/>'
backup=""

if [ -f "${target}" ]; then
  if ! grep -Eq '<jsplugins([[:space:]>])' "${target}" || ! grep -q '</jsplugins>' "${target}"; then
    echo "现有 WPS 加载项清单格式异常，未做任何修改：${target}" >&2
    exit 1
  fi
  if command -v xmllint >/dev/null 2>&1 && ! xmllint --noout "${target}" >/dev/null 2>&1; then
    echo "现有 WPS 加载项清单不是有效 XML，未做任何修改：${target}" >&2
    exit 1
  fi

  backup="${target}.backup-$(date +%Y%m%d-%H%M%S)"
  cp -p "${target}" "${backup}"
  ENTRY="${entry}" perl -0777 -pe '
    s{<jsplugin(?:online)?\b(?=[^>]*\bname=(["\x27])AI4PaperWriting\1)[^>]*(?:/>|>.*?</jsplugin>)}{}gs;
    s{</jsplugins>}{$ENV{ENTRY}."\n</jsplugins>"}e;
  ' "${target}" > "${tmp}"
else
  printf '%s\n' '<?xml version="1.0" encoding="UTF-8"?>' '<jsplugins>' "${entry}" '</jsplugins>' > "${tmp}"
fi

count="$(grep -o 'name="AI4PaperWriting"' "${tmp}" | wc -l | tr -d '[:space:]')"
if [ "${count}" != "1" ] || ! grep -q 'type="wps"' "${tmp}" ||
   ! grep -q 'url="https://ai4paper.pro/wps-addin/"' "${tmp}" ||
   ! grep -q 'enable="true"' "${tmp}"; then
  echo "AI4Paper 注册信息生成失败，原清单未改动。" >&2
  exit 1
fi
if command -v xmllint >/dev/null 2>&1 && ! xmllint --noout "${tmp}" >/dev/null 2>&1; then
  echo "新清单 XML 校验失败，原清单未改动。" >&2
  exit 1
fi

chmod 0644 "${tmp}"
mv "${tmp}" "${target}"
trap - EXIT

echo "AI4Paper WPS 加载项已安装。请完全退出并重新打开 WPS。"
if [ -n "${backup}" ]; then
  echo "原清单备份：${backup}"
fi
