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

repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
tmpdir="$(mktemp -d)"
trap 'rm -rf "$tmpdir"' EXIT

tmpbin="$tmpdir/bin"
mkdir -p "$tmpbin"
cat > "$tmpbin/jq" <<'STUB'
#!/usr/bin/env python3
import json
import sys

args = sys.argv[1:]
values = {}
idx = 0
while idx < len(args):
    if args[idx] == "--arg":
        values[args[idx + 1]] = args[idx + 2]
        idx += 3
    else:
        idx += 1

if "fn" in values:
    print(json.dumps({"mode": "single_part", "filename": values["fn"], "content_type": values["ct"]}, indent=2))
else:
    print(json.dumps({
        "parent": {"database_id": values.get("db")},
        "properties": {
            values.get("titleProp", "Name"): {"title": [{"text": {"content": values.get("title")}}]},
            values.get("typeProp", "Type"): {"select": {"name": values.get("typeVal")}},
        },
    }, indent=2))
STUB
chmod +x "$tmpbin/jq"
PATH="$tmpbin:$PATH"
export PATH

sample="$tmpdir/sample image.png"
printf '\x89PNG\r\n\x1a\n' > "$sample"

main_output="$tmpdir/main.out"
"$repo_root/scripts/send_to_notion_image.sh" --dry-run "$sample" > "$main_output"

grep -q 'Dry run passed: sample image.png → "sample image"' "$main_output"
grep -q 'https://api.notion.com/v1/file_uploads' "$main_output"
grep -q 'https://api.notion.com/v1/pages' "$main_output"
grep -q 'DRY_RUN_DATABASE_ID' "$main_output"
grep -q '"filename": "sample image.png"' "$main_output"

custom_output="$tmpdir/custom.out"
SENDPREVIEW_TITLE='Custom Dry Title' \
NOTES_DB_ID='dry-db-id' \
PROP_TITLE='Title' \
PROP_TYPE='Kind' \
TYPE_VALUE='Screenshot' \
  "$repo_root/scripts/send_to_notion_image.sh" --dry-run "$sample" > "$custom_output"

grep -q 'Custom Dry Title' "$custom_output"
grep -q 'dry-db-id' "$custom_output"
grep -q 'Screenshot' "$custom_output"

"$repo_root/scripts/send_to_notion_image.sh" --check-deps > "$tmpdir/deps.out"
grep -q 'Dependencies available' "$tmpdir/deps.out"

install_output="$tmpdir/install.out"
INSTALL_DIR="$tmpdir/bin" CONFIG_DIR="$tmpdir/config" "$repo_root/scripts/install.sh" > "$install_output"
test -x "$tmpdir/bin/send_to_notion_image.sh"
test -f "$tmpdir/config/.env"
test "$(stat -f '%Lp' "$tmpdir/config/.env")" = "600"
grep -q 'NOTION_TOKEN=' "$tmpdir/config/.env"

help_output="$tmpdir/help.out"
"$repo_root/scripts/send_to_notion_image.sh" --help > "$help_output"
grep -q 'Usage: send_to_notion_image.sh \[--dry-run\] \[--check-deps\]' "$help_output"
grep -q 'SENDPREVIEW_TITLE="Title"' "$help_output"

unknown_output="$tmpdir/unknown.out"
if "$repo_root/scripts/send_to_notion_image.sh" --nope > "$unknown_output" 2>&1; then
  echo "Expected unknown option to fail" >&2
  exit 1
fi
grep -q 'Unknown option: --nope' "$unknown_output"

# Existing config must not be overwritten on a second install.
printf 'NOTION_TOKEN="kept"\n' > "$tmpdir/config/.env"
INSTALL_DIR="$tmpdir/bin" CONFIG_DIR="$tmpdir/config" "$repo_root/scripts/install.sh" > /dev/null
grep -q 'NOTION_TOKEN="kept"' "$tmpdir/config/.env"

echo "✅ dry-run harness passed"
