// netlify/functions/confirm-transfer.js // // Se invoca cuando un alumno elige "Transferencia" y envía el formulario. // Hace dos cosas: // 1) Envía un email al alumno con los datos bancarios y el importe exacto. // 2) Registra la pre-inscripción en Google Sheets como "Pendiente de pago". // // VARIABLES DE ENTORNO (Netlify → Site settings → Environment variables): // RESEND_API_KEY → clave de Resend (resend.com) // SCHOOL_EMAIL_FROM → email remitente verificado en Resend // GOOGLE_SHEETS_WEBHOOK_URL → URL del Google Apps Script publicado // BANK_HOLDER → Titular de la cuenta bancaria // BANK_IBAN → IBAN completo // // SEGURIDAD: BANK_HOLDER y BANK_IBAN se leen aquí en el servidor y se // incluyen únicamente en el email al alumno. NUNCA se devuelven al navegador. // Tabla de precios (debe estar sincronizada con create-checkout.js y el HTML) function calcularPrecioBase(horasSemanales) { if (horasSemanales <= 0) return 0; if (horasSemanales === 1) return 35; if (horasSemanales === 2) return 60; if (horasSemanales === 3) return 80; return 80 + (horasSemanales - 3) * 20; } exports.handler = async function (event) { if (event.httpMethod !== 'POST') { return { statusCode: 405, body: 'Method Not Allowed' }; } try { const data = JSON.parse(event.body); const { nombre, email, telefono, edad, clasesSeleccionadas, horasSemanales } = data; if (!nombre || !email || !horasSemanales) { return { statusCode: 400, body: JSON.stringify({ error: 'Faltan datos obligatorios.' }), }; } const precioBase = calcularPrecioBase(Number(horasSemanales)); // Datos bancarios — solo viven en el servidor const titular = process.env.BANK_HOLDER || '[Titular no configurado]'; const iban = process.env.BANK_IBAN || '[IBAN no configurado]'; // 1) Email al alumno con los datos de transferencia try { await fetch('https://api.resend.com/emails', { method: 'POST', headers: { 'Authorization': `Bearer ${process.env.RESEND_API_KEY}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ from: process.env.SCHOOL_EMAIL_FROM, to: email, subject: 'Datos para completar tu inscripción en Dicharm Dance 🏦', html: `

¡Casi lo tienes, ${nombre}!

Hemos recibido tu solicitud de plaza. Para confirmarla, realiza la transferencia en los próximos 3 días laborables:

Titular: ${titular}

IBAN: ${iban}

Importe: ${precioBase}€

Concepto: Inscripción Septiembre – ${nombre}

⚠️ Incluye tu nombre completo en el concepto para que podamos identificar el pago fácilmente.

Clases reservadas: ${clasesSeleccionadas}

Horas semanales: ${horasSemanales}h

Una vez confirmemos la recepción del ingreso (24-48h laborables), recibirás otro email con la confirmación definitiva de tu plaza.

¿Tienes alguna duda? Escríbenos a dicharmdance@gmail.com o por WhatsApp.

¡Nos vemos en la pista! 💃🕺

Dicharm Dance · Carrer d'Eusebi Güell 43, Sant Boi de Llobregat

`, }), }); } catch (err) { console.error('Error enviando email de transferencia:', err); // No interrumpimos el flujo — igual registramos en Sheets } // 2) Registrar en Google Sheets como "Pendiente de pago" try { await fetch(process.env.GOOGLE_SHEETS_WEBHOOK_URL, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ tipo: 'nueva_inscripcion', datos: { nombre, email, telefono: telefono || '', edad: edad || '', clases: clasesSeleccionadas, horasSemanales: String(horasSemanales), precioBase: String(precioBase), importePagado: 'Pendiente de pago', fechaPago: new Date().toISOString(), stripeSessionId: '', dni: data.dni || '', fechaNacimiento: data.fechaNacimiento || '', tutor1Nombre: data.tutor1Nombre || '', tutor1Telefono: data.tutor1Telefono || '', tutor1Email: data.tutor1Email || '', tutor1Relacion: data.tutor1Relacion || '', tutor1Dni: data.tutor1Dni || '', tutor2Nombre: data.tutor2Nombre || '', tutor2Telefono: data.tutor2Telefono || '', tutor2Email: data.tutor2Email || '', tutor2Relacion: data.tutor2Relacion || '', tutor2Dni: data.tutor2Dni || '', firma: data.firma || '', comoNosConocio: data.comoNosConocio || '', aceptaReglamento: data.aceptaReglamento || '', aceptaRgpd: data.aceptaRgpd || '', aceptaImagen: data.aceptaImagen || '', formaPago: 'Transferencia', }, }), }); } catch (err) { console.error('Error registrando transferencia en Google Sheets:', err); } // Solo confirmamos que el proceso arrancó bien. // Los datos bancarios NO se incluyen en esta respuesta. return { statusCode: 200, body: JSON.stringify({ ok: true }), }; } catch (err) { console.error('Error en confirm-transfer:', err); return { statusCode: 500, body: JSON.stringify({ error: 'Error interno. Inténtalo de nuevo o contáctanos.' }), }; } };