import os
import sys
import asyncio

sys.path.insert(0, '/root/02-production/nanobot')
os.chdir('/root/02-production/nanobot')
os.environ['HTTPS_PROXY'] = 'socks5://127.0.0.1:20000'
os.environ['HTTP_PROXY'] = 'socks5://127.0.0.1:20000'

from nanobot.config.loader import load_config
from nanobot.providers.responses_http_provider import ResponsesHTTPProvider
from nanobot.agent.loop import AgentLoop
from nanobot.bus.queue import MessageBus
from nanobot.config.paths import get_cron_dir
from nanobot.cron.service import CronService

cfg = load_config()
bus = MessageBus()
cron = CronService(get_cron_dir() / 'jobs.json')
loop = AgentLoop(
    bus=bus,
    provider=None,
    workspace=cfg.workspace_path,
    model=cfg.agents.defaults.model,
    max_iterations=cfg.agents.defaults.max_tool_iterations,
    context_window_tokens=cfg.agents.defaults.context_window_tokens,
    web_search_config=cfg.tools.web.search,
    web_proxy=cfg.tools.web.proxy or None,
    exec_config=cfg.tools.exec,
    cron_service=cron,
    restrict_to_workspace=cfg.tools.restrict_to_workspace,
    mcp_servers=cfg.tools.mcp_servers,
    channels_config=cfg.channels,
)

tool_defs = loop.tools.get_definitions()
system_prompt = loop.context.build_system_prompt()
p = cfg.get_provider(cfg.agents.defaults.model)
provider = ResponsesHTTPProvider(
    api_key=p.api_key,
    api_base=cfg.get_api_base(cfg.agents.defaults.model),
    default_model=cfg.agents.defaults.model,
    extra_headers=p.extra_headers,
)

cases = [
    ('user only no tools', [{'role':'user','content':'hello'}], None),
    ('user only with tools', [{'role':'user','content':'hello'}], tool_defs),
    ('system+user no tools', [{'role':'system','content':system_prompt},{'role':'user','content':'hello'}], None),
    ('system+user with tools', [{'role':'system','content':system_prompt},{'role':'user','content':'hello'}], tool_defs),
    ('short system+user no tools', [{'role':'system','content':'You are helpful.'},{'role':'user','content':'hello'}], None),
    ('short system+user with tools', [{'role':'system','content':'You are helpful.'},{'role':'user','content':'hello'}], tool_defs),
]

async def main():
    print('system_len', len(system_prompt))
    for name, messages, tools in cases:
        resp = await provider.chat(messages=messages, tools=tools, model=cfg.agents.defaults.model)
        status = f"OK:{resp.finish_reason}" if resp.finish_reason != 'error' else 'ERR'
        snippet = (resp.content or '')[:120].replace('\n',' ')
        print(name, '=>', status, '|', snippet)

asyncio.run(main())
