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': '*' } });
}