import { NextRequest, NextResponse } from "next/server";
import {
  getTuBukuIndukList,
  createTuBukuInduk,
  updateTuBukuInduk,
  deleteTuBukuInduk,
  getTuBukuIndukById,
} from "@/lib/db";
import { getCurrentAcademicYear } from "@/lib/academicYear";

export async function GET(req: NextRequest) {
  try {
    const { searchParams } = new URL(req.url);
    const tahun_ajaran = searchParams.get("tahun_ajaran") || getCurrentAcademicYear();
    const tingkat = searchParams.get("tingkat") || undefined;
    const rombel = searchParams.get("rombel") || undefined;
    const status = searchParams.get("status") || undefined;
    const search = searchParams.get("search") || undefined;
    const page = parseInt(searchParams.get("page") || "1", 10);
    const pageSize = parseInt(searchParams.get("pageSize") || "15", 10);

    const result = await getTuBukuIndukList({
      tahun_ajaran,
      tingkat,
      rombel,
      status,
      search,
      page,
      pageSize,
    });

    return NextResponse.json({
      success: true,
      ...result,
    });
  } catch (error: any) {
    console.error("GET /api/tu/buku-induk error:", error);
    return NextResponse.json(
      { success: false, error: error.message || "Gagal memuat data buku induk siswa" },
      { status: 500 }
    );
  }
}

export async function POST(req: NextRequest) {
  try {
    const body = await req.json();

    if (!body.nama_lengkap || !body.nis) {
      return NextResponse.json(
        { success: false, error: "Nama lengkap dan NIS wajib diisi" },
        { status: 400 }
      );
    }

    const id = await createTuBukuInduk(body);
    const created = await getTuBukuIndukById(id);

    return NextResponse.json({
      success: true,
      message: "Data buku induk siswa berhasil ditambahkan",
      id,
      data: created,
    });
  } catch (error: any) {
    console.error("POST /api/tu/buku-induk error:", error);
    return NextResponse.json(
      { success: false, error: error.message || "Gagal menyimpan data buku induk" },
      { status: 500 }
    );
  }
}

export async function PUT(req: NextRequest) {
  try {
    const body = await req.json();
    const id = Number(body.id);

    if (!id) {
      return NextResponse.json(
        { success: false, error: "ID buku induk tidak valid" },
        { status: 400 }
      );
    }

    const updated = await updateTuBukuInduk(id, body);
    if (!updated) {
      return NextResponse.json(
        { success: false, error: "Data buku induk tidak ditemukan atau tidak berubah" },
        { status: 404 }
      );
    }

    const refreshed = await getTuBukuIndukById(id);

    return NextResponse.json({
      success: true,
      message: "Data buku induk siswa berhasil diperbarui",
      data: refreshed,
    });
  } catch (error: any) {
    console.error("PUT /api/tu/buku-induk error:", error);
    return NextResponse.json(
      { success: false, error: error.message || "Gagal memperbarui data buku induk" },
      { status: 500 }
    );
  }
}

export async function DELETE(req: NextRequest) {
  try {
    const { searchParams } = new URL(req.url);
    const id = Number(searchParams.get("id"));

    if (!id) {
      return NextResponse.json(
        { success: false, error: "ID buku induk tidak valid" },
        { status: 400 }
      );
    }

    const deleted = await deleteTuBukuInduk(id);
    if (!deleted) {
      return NextResponse.json(
        { success: false, error: "Data tidak ditemukan" },
        { status: 404 }
      );
    }

    return NextResponse.json({
      success: true,
      message: "Data buku induk siswa berhasil dihapus",
    });
  } catch (error: any) {
    console.error("DELETE /api/tu/buku-induk error:", error);
    return NextResponse.json(
      { success: false, error: error.message || "Gagal menghapus data buku induk" },
      { status: 500 }
    );
  }
}
