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

const productInput = z.object({
  slug: z.string().min(1),
  sku: z.string().min(1),
  price: z.number().nullable().optional(),
  currency: z.string().default('TND'),
  available: z.boolean().default(true),
  categoryId: z.string(),
  images: z.array(z.string()).default([]),
  published: z.boolean().default(false),
  translations: z.object({
    fr: z.object({ name: z.string(), shortDescription: z.string(), description: z.string() }),
    ar: z.object({ name: z.string(), shortDescription: z.string(), description: z.string() })
  })
});

export async function GET() {
  const { response } = await requireAdmin();
  if (response) return response;

  const products = await prisma.product.findMany({
    include: { translations: true },
    orderBy: { createdAt: 'desc' }
  });
  return NextResponse.json(products);
}

export async function POST(req: Request) {
  const { response } = await requireAdmin();
  if (response) return response;

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

  const data = parsed.data;

  const product = await prisma.product.create({
    data: {
      slug: data.slug,
      sku: data.sku,
      price: data.price ?? null,
      currency: data.currency,
      available: data.available,
      categoryId: data.categoryId,
      images: data.images,
      published: data.published,
      translations: {
        create: [
          { locale: 'fr', ...data.translations.fr },
          { locale: 'ar', ...data.translations.ar }
        ]
      }
    }
  });

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