import { Cliente, Modello, PrismaClient, Prisma } from "@/generated/prisma";

export async function GET(request: Request) {
  const prisma = new PrismaClient();

  const clients = await prisma.cliente.findMany({
    include: {
      registratori: {
        include: {
          interventi: true,
        },
      },
    },
  });

  return Response.json({ clients });
}

function extractLatLonFromGmapsUrl(url: string) {
  // Usa una regex per cercare la latitudine e la longitudine nell'URL
  const regex = /@(-?\d+\.\d+),(-?\d+\.\d+)/;
  const match = url.match(regex);

  if (match) {
    const lat = parseFloat(match[1]);
    const lon = parseFloat(match[2]);
    return [lat, lon]; // Restituisce un array con latitudine e longitudine
  } else {
    return [0, 0]; // Se non trova latitudine e longitudine
  }
}

export async function POST(request: Request) {
  const prisma = new PrismaClient();
  const data = await request.json();
  const [lat, lon] = extractLatLonFromGmapsUrl(data.sede_url);

  const cliente = {
    contratto: data.contratto,
    email: data.email,
    partita_iva: data.partita_iva,
    ragione_sociale: data.ragione_sociale,
    sede: data.sede,
    sede_url: data.sede_url,
    telefono: data.telefono,
    lat: lat,
    lon: lon,
  };

  try {
    await prisma.cliente.create({
      data: cliente,
    });
  } catch (e) {
    if (e instanceof Prisma.PrismaClientKnownRequestError) {
      if (e.code == "P2002") {
        return Response.json(
          { message: "Il cliente esista già" },
          { status: 400 },
        );
      }
    }
  }

  return Response.json({ message: "Cliente creato" });
}
