#!/usr/bin/env bash
#
# tools/sniff.sh — wrapper do sniffCSS (computed styles + a11y/visual gate).
#
# O sniff é a FONTE DA VERDADE de layout/estilo (ADR-025): capture → check → diff.
# Resolve o binário em ordem: $SNIFF_BIN → `sniff` no PATH → imagem Docker pinada.
#
# Uso:
#   tools/sniff.sh prime
#   tools/sniff.sh capture --url <URL> --selector <CSS> [--depth N] [--no-summary]
#   tools/sniff.sh check --input <snap.jsonl> --rules --uniform
#   tools/sniff.sh diff <base.jsonl> <head.jsonl> [--tolerance 0.5]
#   tools/sniff.sh snapshots
#
# Defaults de projeto: viewport 1366x768; store em src/tests-e2e/sniff ($SNIFF_SNAPSHOT_DIR).
set -Eeuo pipefail

ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$ROOT"

# Runtime único (docker | podman) para o fallback em container.
# shellcheck source=tools/runtime.sh
. "$ROOT/tools/runtime.sh"

SNIFF_IMAGE="${SNIFF_IMAGE:-stallonels/sniffcss:v0.5.1@sha256:80ff616f73f0af1101564cba701d67c9e17b550e13765a30b6afabf60a8556ba}"
SNIFF_SNAPSHOT_DIR="${SNIFF_SNAPSHOT_DIR:-$ROOT/src/tests-e2e/sniff}"
SNIFF_VIEWPORT="${SNIFF_VIEWPORT:-1366x768}"
export SNIFF_SNAPSHOT_DIR

run() {
    if [ -n "${SNIFF_BIN:-}" ]; then
        "$SNIFF_BIN" "$@"
        return
    fi
    if command -v sniff >/dev/null 2>&1; then
        sniff "$@"
        return
    fi
    if command -v "${ENGINE[0]}" >/dev/null 2>&1; then
        # --network host: o alvo (app) está em 127.0.0.1:${WEB_PORT} do host.
        "${ENGINE[@]}" run --rm --init "${RUN_ARGS[@]}" \
            --network host \
            -v "$ROOT":/work"$MOUNT_LABEL" -w /work \
            -e SNIFF_SNAPSHOT_DIR=/work/src/tests-e2e/sniff \
            "$SNIFF_IMAGE" "$@"
        return
    fi
    echo "sniff.sh: sniff ausente. Instale (curl https://raw.githubusercontent.com/st-all-one/sniff-css/main/install.sh | sh) ou use ${ENGINE[0]}/podman." >&2
    exit 70
}

cmd="${1:-prime}"
if [ "$#" -gt 0 ]; then shift; fi

case "$cmd" in
    capture)
        run capture --viewport "$SNIFF_VIEWPORT" "$@"
        ;;
    prime | check | diff | snapshots | init | self)
        run "$cmd" "$@"
        ;;
    *)
        run "$cmd" "$@"
        ;;
esac
