import { NextResponse } from "next/server";
import { z } from "zod";
import { prisma } from "@/lib/prisma";
import { requireAdmin, unauthorized } from "@/lib/admin-api";

const schema = z
  .object({
    address: z.string().optional(),
    neighborhood: z.string().optional(),
    addressNumber: z.string().optional(),
    phone: z.string().optional(),
    cep: z.string().optional(),
    city: z.string().optional(),
    uf: z.string().optional(),
    email: z.union([z.string().email(), z.literal("")]).optional(),
  })
  .strict();

function normalize(v: string | undefined) {
  if (v === undefined) return undefined;
  const t = v.trim();
  return t === "" ? null : t;
}

export async function GET() {
  const admin = await requireAdmin();
  if (!admin) return unauthorized();

  const cfg = await prisma.contactInfo.findUnique({ where: { id: "default" } });
  return NextResponse.json({
    address: cfg?.address ?? "",
    neighborhood: cfg?.neighborhood ?? "",
    addressNumber: cfg?.addressNumber ?? "",
    phone: cfg?.phone ?? "",
    cep: cfg?.cep ?? "",
    city: cfg?.city ?? "",
    uf: cfg?.uf ?? "",
    email: cfg?.email ?? "",
  });
}

export async function PUT(req: Request) {
  const admin = await requireAdmin();
  if (!admin) return unauthorized();

  const body = schema.parse(await req.json());

  await prisma.contactInfo.upsert({
    where: { id: "default" },
    create: {
      id: "default",
      address: normalize(body.address),
      neighborhood: normalize(body.neighborhood),
      addressNumber: normalize(body.addressNumber),
      phone: normalize(body.phone),
      cep: normalize(body.cep),
      city: normalize(body.city),
      uf: normalize(body.uf),
      email: normalize(body.email),
    },
    update: {
      address: normalize(body.address),
      neighborhood: normalize(body.neighborhood),
      addressNumber: normalize(body.addressNumber),
      phone: normalize(body.phone),
      cep: normalize(body.cep),
      city: normalize(body.city),
      uf: normalize(body.uf),
      email: normalize(body.email),
    },
  });

  return NextResponse.json({ ok: true });
}

