#!/bin/zsh
# open-chrome-tab — open a URL in a new Chrome/Edge tab, bypassing popup blockers.
#
# Why this exists:
#   `window.open(url, '_blank')` injected via osascript/JXA runs without a user
#   gesture, so the browser's popup blocker kills it silently. The only reliable way
#   to open a new tab from outside the browser is to ask the browser itself (via
#   AppleScript) to create the tab.
#
# Usage:
#   open-chrome-tab URL                         # open in Chrome window 1
#   open-chrome-tab URL --browser edge          # open in Edge window 1
#   open-chrome-tab URL --window 2              # open in window 2
#   open-chrome-tab URL --foreground            # also bring browser to the front
#
# See also: GOTCHAS.md §21.
set -euo pipefail

usage() {
  awk 'NR == 1 { next } /^set -/ { exit } { sub(/^# ?/, ""); print }' "${(%):-%x}"
}

if [[ $# -lt 1 || "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then
  usage
  [[ $# -lt 1 ]] && exit 2 || exit 0
fi

URL=""
WINDOW_INDEX=1
FOREGROUND=0
BROWSER="Google Chrome"

normalize_browser() {
  local raw="${1:-Google Chrome}"
  local key="${raw:l}"
  key="${key// /-}"
  key="${key//_/-}"
  case "$key" in
    chrome|google-chrome|googlechrome) echo "Google Chrome" ;;
    edge|microsoft-edge|microsoftedge|msedge) echo "Microsoft Edge" ;;
    *) echo "$raw" ;;
  esac
}

while [[ $# -gt 0 ]]; do
  case "$1" in
    --browser) BROWSER="$(normalize_browser "$2")"; shift 2 ;;
    --window) WINDOW_INDEX="$2"; shift 2 ;;
    --foreground) FOREGROUND=1; shift ;;
    -h|--help) usage; exit 0 ;;
    *)
      if [[ -z "$URL" ]]; then
        URL="$1"; shift
      else
        echo "unknown arg: $1" >&2; exit 2
      fi
      ;;
  esac
done

if [[ -z "$URL" ]]; then
  usage
  exit 2
fi

# Escape double-quotes in URL for AppleScript string literal
ESCAPED_URL=${URL//\"/\\\"}

if [[ "$FOREGROUND" == "1" ]]; then
  osascript -e "tell application \"${BROWSER}\" to activate" \
            -e "tell application \"${BROWSER}\" to tell window ${WINDOW_INDEX} to make new tab with properties {URL:\"${ESCAPED_URL}\"}"
else
  osascript -e "tell application \"${BROWSER}\" to tell window ${WINDOW_INDEX} to make new tab with properties {URL:\"${ESCAPED_URL}\"}"
fi
