import { NextResponse } from "next/server";

import prismadb from "@/lib/prisma";

const corsHeaders = {
  "Access-Control-Allow-Origin": "*",
  "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
  "Access-Control-Allow-Headers": "Content-Type, Authorization",
};

export async function OPTIONS() {
  return NextResponse.json({}, { headers: corsHeaders });
}

//créer un utilisateur sans compte
export async function POST(
  req: Request,
  { params }: { params: { storeId: string } }
) {
  try {
    const body = await req.json();

    const { email } = body;

    if (!email) {
      return new NextResponse("Adresse mail requise", { status: 400, headers: corsHeaders });
    }

    if (!params.storeId) {
      return new NextResponse("Boutique requise", { status: 400, headers: corsHeaders });
    }

    const storeByUserId = await prismadb.store.findFirst({
      where: {
        id: params.storeId,
      }
    });

    if (!storeByUserId) {
      return new NextResponse("Non autorisé", { status: 403, headers: corsHeaders });
    }

    //on vérifie si l'adresse mail est déjà utilisée 
    const customerExist = await prismadb.customer.findFirst({
      where: {
        email,
        storeId: params.storeId
      }
    })

    //si pas utilisée :
    if (!customerExist) {
      const customer = await prismadb.customer.create({
        data: {
          email,
          storeId: params.storeId
        }
      });
      return NextResponse.json(customer, { headers: corsHeaders });
    }

    //sinon
    return NextResponse.json("Adresse mail déjà utilisée", {
      status: 400,
      headers: corsHeaders
    });

  } catch (error) {
    console.log('[CUSTOMERS_POST]', error);
    return new NextResponse("Internal error", { status: 500, headers: corsHeaders })
  }
};