const HTML = ` Parcelas Tucumán - Consulta Catastral con IA
`; export default { async fetch(request, env) { const url = new URL(request.url); if (url.pathname === '/' || url.pathname === '/index.html') return new Response(HTML, { headers: { 'Content-Type': 'text/html;charset=UTF-8' } }); if (url.pathname === '/api/parcela') { const padron = url.searchParams.get('padron'); if (!padron) return json({ error: 'Falta padron' }, 400); try { const resp = await fetch('https://aplicaciones.catastrotucuman.gov.ar/frmInfoParcelageo.asp?txtpadron=' + encodeURIComponent(padron)); const text = await resp.text(); return new Response(text, { headers: { 'Content-Type': 'text/html;charset=UTF-8', 'Access-Control-Allow-Origin': '*' } }); } catch (e) { return json({ error: e.message }, 502); } } if (url.pathname === '/api/wfs') { const lat = url.searchParams.get('lat'); const lng = url.searchParams.get('lng'); if (!lat || !lng) return json({ error: 'Faltan lat y lng' }, 400); const wfsUrl = 'http://190.221.181.227/geoserver/dgct/wfs?service=WFS&version=1.1.0&request=GetFeature&typeName=dgct:propiedades&outputFormat=application/json&CQL_FILTER=CONTAINS(geom,POINT(' + lng + ' ' + lat + '))'; try { const resp = await fetch(wfsUrl); const data = await resp.text(); return new Response(data, { headers: { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*' } }); } catch (e) { return json({ error: e.message }, 502); } } if (url.pathname === '/api/ai' && request.method === 'POST') { try { const body = await request.json(); const aiResp = await fetch('https://api.x.ai/v1/chat/completions', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer ' + env.XAI_API_KEY }, body: JSON.stringify({ model: 'grok-3-latest', messages: [ { role: 'system', content: 'Sos un asistente experto en catastro inmobiliario de Tucumán, Argentina. Analizá los datos de parcelas y proporcioná un análisis claro. Incluí: tipo de propiedad, ubicación, superficie, valor catastral si está disponible, y observaciones. Respondé en español.' }, { role: 'user', content: 'Analizá estos datos catastrales y dame un resumen estructurado:\n\n' + (body.data || '') } ], temperature: 0.3, max_tokens: 800 }) }); const aiJson = await aiResp.json(); return json({ response: aiJson.choices?.[0]?.message?.content || 'Sin respuesta.' }); } catch (e) { return json({ error: e.message }, 500); } } return json({ error: 'Not found' }, 404); } }; function json(obj, status) { return new Response(JSON.stringify(obj), { status: status || 200, headers: { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*' } }); }