import sys
import json
import subprocess
import os

def main():
    # Debug log to stderr
    sys.stderr.write(f"DEBUG: mock_gemini_cli called with args: {sys.argv}\n")
    sys.stderr.write(f"DEBUG: GEMINI_CLI_HOOK_CONTEXT: {os.environ.get('GEMINI_CLI_HOOK_CONTEXT')}\n")
    
    # Read prompt from stdin
    try:
        # On Windows, stdin might be closed or behave weirdly if not handled
        prompt = sys.stdin.read()
    except EOFError:
        prompt = ""
        
    sys.stderr.write(f"DEBUG: Received prompt via stdin ({len(prompt)} chars)\n")
    sys.stderr.flush()

    # Skip management commands
    if len(sys.argv) > 1 and sys.argv[1] in ["mcp", "extensions", "skills", "hooks"]:
        return

    # If the prompt contains tool results, provide final answer
    if '"role": "tool"' in prompt or '"tool_call_id"' in prompt:
        print(json.dumps({
            "type": "message", 
            "role": "assistant",
            "content": "I have processed the tool results. Everything looks good!"
        }), flush=True)
        print(json.dumps({
            "type": "result", 
            "status": "success",
            "stats": {"total_tokens": 100, "input_tokens": 80, "output_tokens": 20},
            "session_id": "mock-session-final"
        }), flush=True)
        return

    # Default flow: simulate a tool call
    bridge_path = os.path.abspath("scripts/cli_tool_bridge.py")
    # Using format that bridge understands
    bridge_tool_call = {
        "name": "read_file",
        "input": {"path": "test.txt"}
    }
    
    sys.stderr.write(f"DEBUG: Calling bridge at {bridge_path}\n")
    sys.stderr.flush()

    try:
        # CRITICAL: Use the current process environment to ensure GEMINI_CLI_HOOK_CONTEXT is passed
        process = subprocess.Popen(
            [sys.executable, bridge_path],
            stdin=subprocess.PIPE,
            stdout=subprocess.PIPE,
            stderr=subprocess.PIPE,
            text=True,
            env=os.environ
        )
        stdout, stderr = process.communicate(input=json.dumps(bridge_tool_call))
        
        sys.stderr.write(f"DEBUG: Bridge stdout: {stdout}\n")
        sys.stderr.write(f"DEBUG: Bridge stderr: {stderr}\n")
        
        decision_data = json.loads(stdout.strip())
        decision = decision_data.get("decision")
    except Exception as e:
        sys.stderr.write(f"DEBUG: Bridge failed: {e}\n")
        decision = "deny"

    if decision == "allow":
        # Simulate REAL CLI field names for adapter normalization test
        print(json.dumps({
            "type": "tool_use", 
            "tool_name": "read_file", 
            "tool_id": "call_123",
            "parameters": {"path": "test.txt"}
        }), flush=True)
        
        print(json.dumps({
            "type": "message", 
            "role": "assistant",
            "content": "I am reading the file now..."
        }), flush=True)
        
        print(json.dumps({
            "type": "result", 
            "status": "success",
            "stats": {"total_tokens": 50, "input_tokens": 40, "output_tokens": 10},
            "session_id": "mock-session-123"
        }), flush=True)
    else:
        print(json.dumps({
            "type": "message",
            "role": "assistant",
            "content": f"Tool execution was denied. Decision: {decision}"
        }), flush=True)
        print(json.dumps({
            "type": "result",
            "status": "success",
            "stats": {"total_tokens": 10, "input_tokens": 10, "output_tokens": 0},
            "session_id": "mock-session-denied"
        }), flush=True)

if __name__ == "__main__":
    main()
