import { NextResponse } from 'next/server'; import { dataService } from '@/lib/data-service'; import { otpStore } from '@/lib/otp-store'; import { sendWhatsAppMessage } from '@/lib/evolution-api'; export async function POST(request: Request) { try { const { identifier, name } = await request.json(); if (!identifier) { return NextResponse.json({ success: false, error: 'Ingresa tu número de celular o correo' }, { status: 400 }); } const cleanInput = identifier.trim(); // Buscar usuario en base de datos const user = dataService.authenticate(cleanInput); let phoneToSend = cleanInput.replace(/\D/g, ''); let userName = name?.trim() || (user ? user.name : 'Cliente'); if (user) { if (!user.isActive) { return NextResponse.json({ success: false, error: 'Esta cuenta se encuentra inactiva.' }, { status: 403 }); } phoneToSend = user.phone.replace(/\D/g, ''); } if (!phoneToSend || phoneToSend.length < 7) { return NextResponse.json( { success: false, error: 'Número de celular inválido. Ingresa un número válido de WhatsApp.' }, { status: 400 } ); } // Generar código de 6 dígitos const code = otpStore.generateOtp(cleanInput, phoneToSend); // Redactar mensaje de seguridad utilizando plantilla const storeSettings = dataService.getSettings(); const message = dataService.renderMessageTemplate('auth_login_otp', { tienda_nombre: storeSettings?.storeName || 'DripZone Sneakers', usuario_nombre: userName, codigo_otp: code, }); // Enviar a WhatsApp via Evolution API const sent = await sendWhatsAppMessage(phoneToSend, message); if (!sent) { // Si falla Evolution (o es teléfono internacional sin formato), permitir fallback seguro console.warn(`[OTP] No se pudo enviar por WhatsApp a ${phoneToSend}. Código generado: ${code}`); } // Enmascarar teléfono para la respuesta pública (ej: 316***5877) const maskedPhone = phoneToSend.length >= 10 ? `${phoneToSend.slice(0, 3)}***${phoneToSend.slice(-4)}` : 'tu número'; return NextResponse.json({ success: true, message: `Código de 6 dígitos enviado por WhatsApp a ${maskedPhone}`, phone: maskedPhone, isRegistered: !!user, }); } catch (error: any) { console.error('Error enviando OTP:', error); return NextResponse.json({ success: false, error: error.message || 'Error al enviar código' }, { status: 500 }); } }