import importlib.util
import json
import sys
import tempfile
from pathlib import Path
from unittest.mock import patch

sys.path.insert(0, 'C:/Solutions/foster/hermes-agent')
from gateway.session_context import set_session_vars, clear_session_vars

spec = importlib.util.spec_from_file_location(
    'ask_michel_tool_tested',
    'C:/MCSJAgent/foster-ask-michel/sal-phase3/ask_michel_tool.py',
)
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)

class Response:
    status = 202
    def __enter__(self): return self
    def __exit__(self, *args): return False
    def read(self): return b'{"status":"accepted"}'

captured = {}
def fake_urlopen(request, timeout=0):
    captured['body'] = json.loads(request.data)
    captured['headers'] = dict(request.headers)
    return Response()

secret = Path(tempfile.gettempdir()) / 'ask-michel-tool-test-secret'
secret.write_text('test-secret', encoding='ascii')
module._SECRET_FILE = secret

tokens = set_session_vars(
    platform='telegram', chat_id='chat-20', chat_name='Town Clerk',
    thread_id='topic-7', user_id='user-9', user_name='Casey',
    message_id='message-11', session_key='telegram:chat-20:topic-7',
)
try:
    with patch.object(module.urllib.request, 'urlopen', fake_urlopen):
        visible = json.loads(module.ask_michel_verify(
            'Where is the report?', 'Use Finance > Reports', 'MCSJ 26.1', True,
        ))
finally:
    clear_session_vars(tokens)
    secret.unlink(missing_ok=True)

origin = captured['body']['origin']
assert origin == {
    'platform': 'telegram', 'chat_id': 'chat-20', 'chat_name': 'Town Clerk',
    'thread_id': 'topic-7', 'user_id': 'user-9', 'user_name': 'Casey',
    'message_id': 'message-11',
}
assert visible['ok'] is True and visible['status'] == 202
assert 'chat-20' not in json.dumps(visible)
print(json.dumps({
    'status': 'PASS', 'origin_captured': True, 'thread_captured': True,
    'message_anchor_captured': True, 'model_visible_ids': False,
}))
