export default { async fetch(request, env) { const url = new URL(request.url); // ================================================================ // RUTA 1: OBTENER PRODUCTOS (PRINTFUL + CLOUDINARY) // ================================================================ if (url.pathname === "/api/products" && request.method === "GET") { try { const PRINTFUL_KEY = env.PRINTFUL_API_KEY; if (!PRINTFUL_KEY) { return new Response(JSON.stringify({ error: "Falta configurar PRINTFUL_API_KEY en Cloudflare" }), { status: 500, headers: { "Content-Type": "application/json" } }); } // Simulamos la respuesta de la estructura idéntica de la API de Printful const mockPrintfulProducts = [ { id: "sync-variant-101", name: "Camiseta Cyberpunk Oversized", retail_price: "29.99", thumbnail_name: "cyberpunk_tee.jpg" }, { id: "sync-variant-102", name: "Sudadera Minimalist Black", retail_price: "49.99", thumbnail_name: "minimal_hoodie.jpg" }, { id: "sync-variant-103", name: "Gorra de Edición Limitada LOD", retail_price: "19.99", thumbnail_name: "limited_cap.jpg" } ]; const CLOUDINARY_CLOUD = env.CLOUDINARY_CLOUD_NAME || "demo"; // Mapeamos los datos inyectando la optimización dinámica del CDN de Cloudinary al vuelo const catalogoUnificado = mockPrintfulProducts.map(prod => { return { id: prod.id, nombre: prod.name, precio: prod.retail_price, imagen_cloudinary: `https://res.cloudinary.com/${CLOUDINARY_CLOUD}/image/upload/f_auto,q_auto,w_600/${prod.thumbnail_name}` }; }); return new Response(JSON.stringify(catalogoUnificado), { headers: { "Content-Type": "application/json" } }); } catch (err) { return new Response(JSON.stringify({ error: "Fallo en el servidor de la tienda" }), { status: 500 }); } } // ================================================================ // RUTA 2: PASARELA DE PAGO (NEWPAYMENTS) // ================================================================ if (url.pathname === "/api/checkout" && request.method === "POST") { try { const body = await request.json(); const productId = body.id; const NEWPAYMENTS_SECRET = env.NEWPAYMENTS_API_KEY; // Aquí se llamaría de forma segura a Newpayments usando NEWPAYMENTS_SECRET let urlPagoSimulada = "https://www.newpayments.com/checkout/demo-link"; if (productId === "sync-variant-101") urlPagoSimulada = "https://www.newpayments.com/link/pago-cyberpunk"; if (productId === "sync-variant-102") urlPagoSimulada = "https://www.newpayments.com/link/pago-minimal-hoodie"; return new Response(JSON.stringify({ url_pago: urlPagoSimulada }), { headers: { "Content-Type": "application/json" } }); } catch (err) { return new Response(JSON.stringify({ error: "Error al conectar con Newpayments" }), { status: 500 }); } } // Servir la interfaz estática si no se solicita una ruta API return env.ASSETS.fetch(request); } };