#!/usr/bin/env bash
# Rewrites the @match lines of publisher-uaproxy-banner.user.js from the one publisher list
# (dotfiles lib/uaproxy/publishers.txt), so the list stays the single source.
# Usage: sync-matches [--check|-c] [--help|-h]
#   --check, -c   change nothing, exit 1 when the @match lines differ from the list
set -euo pipefail

HERE="$(cd "$(dirname "$0")" && pwd)"
SCRIPT="$HERE/publisher-uaproxy-banner.user.js"
LIST="${PUBLISHERS:-$HOME/dotfiles/lib/uaproxy/publishers.txt}"
CHECK=false

while [[ $# -gt 0 ]]; do
  case "$1" in
    --check|-c) CHECK=true; shift ;;
    --help|-h)  sed -n '2,5p' "$0" | sed 's/^# \{0,1\}//'; exit 0 ;;
    *) echo "Error: unknown option: $1" >&2; exit 1 ;;
  esac
done

[[ -f "$LIST" ]] || { echo "Error: publisher list not found: $LIST" >&2; exit 1; }

matches=$(sed 's/#.*//; s/[[:space:]]//g; /^$/d' "$LIST" | awk '{ printf "// @match        *://*.%s/*\n", $0 }')
new=$(MATCHES="$matches" awk '
  /^\/\/ @match / { if (!done) { print ENVIRON["MATCHES"]; done = 1 } ; next }
  { print }' "$SCRIPT")

if $CHECK; then
  [[ "$new" == "$(cat "$SCRIPT")" ]] || { echo "Error: @match lines differ from $LIST; run sync-matches" >&2; exit 1; }
else
  printf '%s\n' "$new" > "$SCRIPT"
fi
