import { NextResponse } from 'next/server';
import { z } from 'zod';
import { prisma } from '@/lib/prisma';
import { requireAdmin } from '@/lib/require-admin';

const testimonialInput = z.object({
  authorName: z.string().min(1),
  authorRole: z.string().optional(),
  companyName: z.string().optional(),
  published: z.boolean().default(false),
  translations: z.object({
    fr: z.object({ quote: z.string() }),
    ar: z.object({ quote: z.string() })
  })
});

export async function GET() {
  const { response } = await requireAdmin();
  if (response) return response;
  const testimonials = await prisma.testimonial.findMany({ include: { translations: true } });
  return NextResponse.json(testimonials);
}

// Real testimonials only — do not seed or accept fabricated quotes here.
export async function POST(req: Request) {
  const { response } = await requireAdmin();
  if (response) return response;

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

  const testimonial = await prisma.testimonial.create({
    data: {
      authorName: data.authorName,
      authorRole: data.authorRole,
      companyName: data.companyName,
      published: data.published,
      translations: {
        create: [
          { locale: 'fr', quote: data.translations.fr.quote },
          { locale: 'ar', quote: data.translations.ar.quote }
        ]
      }
    }
  });
  return NextResponse.json(testimonial, { status: 201 });
}
