import json
import os
import sys


def deny(message):
    print(message, file=sys.stderr)
    sys.exit(2)


try:
    import bashlex

    payload = json.load(sys.stdin)
    if payload.get("tool_name") != "Bash":
        sys.exit(0)

    class GrepPipelineGuard(bashlex.ast.nodevisitor):
        def __init__(self):
            self.piped = set()

        def visitpipeline(self, node, parts):
            for left, right in zip(parts, parts[1:]):
                if left.kind == "pipe" and right.kind == "command":
                    self.piped.add(id(right))

        def visitcommand(self, node, parts):
            words = [part.word for part in parts if part.kind == "word"]
            if words and os.path.basename(words[0]) == "grep":
                if id(node) not in self.piped:
                    deny("grep must be a receiving pipeline stage, not a direct command or pipeline producer.")

    guard = GrepPipelineGuard()
    for tree in bashlex.parse(payload["tool_input"]["command"]):
        guard.visit(tree)
except Exception as exc:
    deny(f"Cannot check the Bash pipeline-position policy: {exc}")
