#!/usr/bin/env python3
"""Synthetic MCP Apps stdio server for PR 29803. No network or persistence."""
import sys, json
from pathlib import Path
HTML = Path(__file__).with_name('weather-card.html').read_text()
def tool(name, meta=None, readonly=True):
    result = dict(name=name, description='Synthetic Oslo weather fixture: '+name, inputSchema={'type':'object','properties':{},'additionalProperties':False}, annotations={'readOnlyHint':readonly,'destructiveHint':False,'openWorldHint':False})
    if meta: result['_meta']=meta
    return result
TOOLS=[tool('show_weather', {'ui':{'resourceUri':'ui://weather/card.html'}}),tool('plain_weather'),tool('legacy_weather',{'ui':{'visibility':['model','app']},'ui/resourceUri':'ui://weather/card.html'}),tool('refresh_weather',{'ui':{'visibility':['app']} }),tool('write_weather',{'ui':{'visibility':['app']}},False)]
for line in sys.stdin:
    try:
        req=json.loads(line); method=req.get('method'); params=req.get('params',{}); result={}
        if 'id' not in req: continue
        if method=='initialize': result={'protocolVersion':params.get('protocolVersion','2025-03-26'),'capabilities':{'tools':{},'resources':{}},'serverInfo':{'name':'weather-fixture','version':'1.0.0'}}
        elif method=='tools/list': result={'tools':TOOLS}
        elif method=='resources/list': result={'resources':[{'uri':'ui://weather/card.html','name':'Weather card','mimeType':'text/html;profile=mcp-app'},{'uri':'ui://weather/details','name':'Weather details','mimeType':'text/plain'}]}
        elif method=='resources/templates/list': result={'resourceTemplates':[]}
        elif method=='prompts/list': result={'prompts':[]}
        elif method=='tools/call':
            temp=23 if params['name']=='refresh_weather' else 25 if params['name']=='write_weather' else 19
            result={'content':[{'type':'text','text':f'Oslo: {temp}°C. Synthetic weather data.'}],'structuredContent':{'city':'Oslo','temperature':temp,'condition':'Sunny'}}
        elif method=='resources/read':
            uri=params['uri']; result={'contents':[{'uri':uri,'mimeType':'text/html;profile=mcp-app' if uri.endswith('.html') else 'text/plain','text':HTML if uri.endswith('.html') else 'Synthetic resource: Oslo weather station ready.'}]}
        print(json.dumps({'jsonrpc':'2.0','id':req['id'],'result':result}),flush=True)
    except Exception as exc:
        print(json.dumps({'jsonrpc':'2.0','id':req.get('id'),'error':{'code':-32603,'message':str(exc)}}),flush=True)
