import { NextResponse } from 'next/server';
import { prisma } from '@/lib/prisma';
import { newsletterSchema } from '@/lib/validation';
import { rateLimit, getClientKey } from '@/lib/rate-limit';
import { sendMail } from '@/lib/mailer';

export async function POST(req: Request) {
  const limited = rateLimit(`newsletter:${getClientKey(req)}`, 5, 60_000);
  if (!limited.ok) {
    return NextResponse.json({ error: 'rate_limited' }, { status: 429 });
  }

  const body = await req.json().catch(() => null);
  const parsed = newsletterSchema.safeParse(body);
  if (!parsed.success) {
    return NextResponse.json({ error: 'invalid_payload' }, { status: 400 });
  }

  const { email, locale } = parsed.data;

  await prisma.newsletterSubscriber.upsert({
    where: { email },
    update: { locale },
    create: { email, locale }
  });

  // Notification only — never blocks the response if SMTP is not configured.
  const subjectFr = 'Bienvenue dans la newsletter';
  const subjectAr = 'مرحباً بكم في النشرة البريدية';
  await sendMail({
    to: email,
    subject: locale === 'ar' ? subjectAr : subjectFr,
    text:
      locale === 'ar'
        ? 'شكراً لاشتراككم. سنوافيكم بآخر الأخبار حول الطاقة الشمسية.'
        : 'Merci pour votre inscription. Vous recevrez nos actualités solaires.'
  });

  return NextResponse.json({ ok: true }, { status: 201 });
}
