#!/usr/bin/env python3
"""
Simulate full Bot flow with SAFETY OVERRIDE.
"""

import os
import sys
sys.path.append(os.getcwd())

# Set to use local config
os.environ["GEMINI_CONFIG_PATH"] = ".gemini.local.env"

from health.utils.env_loader import load_env_with_extras
from slack_bot.dispatcher import MessageDispatcher
from unittest.mock import MagicMock
import time

load_env_with_extras()

print("=" * 80)
print("Simulating Full Bot Flow (with SAFETY OVERRIDE)")
print("=" * 80)

# Create dispatcher
dispatcher = MessageDispatcher()

# Mock Slack client
dispatcher.client = MagicMock()

test_message = "今天睡得怎么样？"
channel_id = "TEST_CHANNEL"
user_id = "TEST_USER"

print(f"\nTest message: {test_message}")
print(f"Model: {dispatcher.llm.get_model_name()}")
print(f"Using proxy: {dispatcher.llm.use_proxy}")
print(f"Tools: {len(dispatcher.tools)}")

print("\n" + "-" * 80)
print("Starting dispatch...")
print("-" * 80)

start = time.time()

try:
    # This will trigger the full flow including SAFETY OVERRIDE
    dispatcher.dispatch(
        message_text=test_message,
        channel_id=channel_id,
        user_id=user_id,
        request_id="TEST"
    )

    elapsed = time.time() - start

    print(f"\n✅ Dispatch completed in {elapsed:.2f}s")

    # Check what messages were sent
    if dispatcher.client.chat_postMessage.called or dispatcher.client.chat_update.called:
        print("\n📤 Messages sent to Slack:")

        if dispatcher.client.chat_update.called:
            for call in dispatcher.client.chat_update.call_args_list:
                args, kwargs = call
                text = kwargs.get('text', args[0] if args else 'N/A')
                print(f"  [UPDATE] {text[:200]}...")

        if dispatcher.client.chat_postMessage.called:
            for call in dispatcher.client.chat_postMessage.call_args_list:
                args, kwargs = call
                text = kwargs.get('text', args[0] if args else 'N/A')
                print(f"  [POST] {text[:200]}...")

        print("\n✅ SUCCESS - Bot responded (probably via SAFETY OVERRIDE)")

    else:
        print("\n❌ No messages sent - something went wrong")

except Exception as e:
    print(f"\n❌ Dispatch failed: {e}")
    import traceback
    traceback.print_exc()

print("\n" + "=" * 80)
print("INTERPRETATION:")
print("=" * 80)
print("\nIf you see a response above:")
print("  → SAFETY OVERRIDE is working (it detected keywords and forced tool call)")
print("  → This is expected with your local proxy")
print("\nIf no response:")
print("  → Check logs above for errors")
print("=" * 80)
