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

const productUpdateInput = z.object({
  price: z.number().nullable().optional(),
  available: z.boolean().optional(),
  images: z.array(z.string()).optional(),
  published: z.boolean().optional(),
  translations: z
    .object({
      fr: z.object({ name: z.string(), shortDescription: z.string(), description: z.string() }).optional(),
      ar: z.object({ name: z.string(), shortDescription: z.string(), description: z.string() }).optional()
    })
    .optional()
});

export async function PATCH(req: Request, { params }: { params: { id: string } }) {
  const { response } = await requireAdmin();
  if (response) return response;

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

  if (data.translations?.fr) {
    await prisma.productTranslation.upsert({
      where: { productId_locale: { productId: params.id, locale: 'fr' } },
      update: data.translations.fr,
      create: { productId: params.id, locale: 'fr', ...data.translations.fr }
    });
  }
  if (data.translations?.ar) {
    await prisma.productTranslation.upsert({
      where: { productId_locale: { productId: params.id, locale: 'ar' } },
      update: data.translations.ar,
      create: { productId: params.id, locale: 'ar', ...data.translations.ar }
    });
  }

  const product = await prisma.product.update({
    where: { id: params.id },
    data: {
      price: data.price,
      available: data.available,
      images: data.images,
      published: data.published
    }
  });

  return NextResponse.json(product);
}

export async function DELETE(_req: Request, { params }: { params: { id: string } }) {
  const { response } = await requireAdmin();
  if (response) return response;

  await prisma.product.delete({ where: { id: params.id } });
  return NextResponse.json({ ok: true });
}
