import { NextRequest, NextResponse } from "next/server";
import { prisma } from "@/lib/prisma";
import { z } from "zod";

// Schema untuk validasi input setting sekolah
const SettingSekolahSchema = z.object({
  namaSekolah: z.string().min(1, "Nama sekolah tidak boleh kosong"),
  jenjang: z.string().min(1, "Jenjang tidak boleh kosong"),
  kementrian: z.string().min(1, "Kementrian tidak boleh kosong"),
  npsn: z.string().min(1, "NPSN tidak boleh kosong"),
  semester: z.string().min(1, "Semester tidak boleh kosong"),
  tahunPelajaran: z.string().min(1, "Tahun pelajaran tidak boleh kosong"),
  tanggalRapor: z.string().transform((str) => new Date(str)),
  noWa: z.string().optional(),
  alamat: z.string().min(1, "Alamat tidak boleh kosong"),
  desa: z.string().min(1, "Desa tidak boleh kosong"),
  kecamatan: z.string().min(1, "Kecamatan tidak boleh kosong"),
  kabupaten: z.string().min(1, "Kabupaten tidak boleh kosong"),
  propinsi: z.string().min(1, "Propinsi tidak boleh kosong"),
  email: z.string().email("Format email tidak valid").optional(),
  kepalaSekolah: z.string().min(1, "Kepala sekolah tidak boleh kosong"),
  nipKepalaSekolah: z.string().min(1, "NIP kepala sekolah tidak boleh kosong"),
  logo: z.string().optional(),
  stempel: z.string().optional(),
  ttdKepsek: z.string().optional(),
  headerLaporan: z.string().optional(),
  kopSekolah: z.string().optional(),
  namaYayasan: z.string().optional(),
  ketuaYayasan: z.string().optional(),
});

// GET - Ambil setting sekolah (hanya ada satu record)
export async function GET() {
  try {
    const setting = await prisma.settingSekolah.findFirst();

    return NextResponse.json({
      success: true,
      data: setting,
    });
  } catch (error) {
    console.error("Error fetching setting sekolah:", error);
    return NextResponse.json(
      {
        success: false,
        message: "Gagal mengambil data setting sekolah",
      },
      { status: 500 },
    );
  }
}

// POST - Buat atau update setting sekolah
export async function POST(request: NextRequest) {
  try {
    const body = await request.json();
    const validatedData = SettingSekolahSchema.parse(body);

    // Cek apakah sudah ada setting sekolah
    const existingSetting = await prisma.settingSekolah.findFirst();

    let setting;
    if (existingSetting) {
      // Update existing setting
      setting = await prisma.settingSekolah.update({
        where: { id: existingSetting.id },
        data: validatedData,
      });
    } else {
      // Create new setting
      setting = await prisma.settingSekolah.create({
        data: validatedData,
      });
    }

    return NextResponse.json({
      success: true,
      data: setting,
      message: "Setting sekolah berhasil disimpan",
    });
  } catch (error) {
    console.error("Error saving setting sekolah:", error);

    if (error instanceof z.ZodError) {
      return NextResponse.json(
        {
          success: false,
          message: "Data tidak valid",
          errors: error.errors,
        },
        { status: 400 },
      );
    }

    return NextResponse.json(
      {
        success: false,
        message: "Gagal menyimpan setting sekolah",
      },
      { status: 500 },
    );
  }
}
