import { NextResponse } from "next/server";
import { db } from "../../../lib/db";

/* ================= GET DETAIL ================= */
export async function GET(
  req: Request,
  { params }: { params: Promise<{ id: string }> }
) {
  try {
    // const id = params.id;
    const { id } = await params;

    const [rows]: any = await db.query(
      `
      SELECT id, name, description, is_active
      FROM categories
      WHERE id = ?
    `,
      [id]
    );

    if (rows.length === 0) {
      return NextResponse.json(
        { message: "Category not found" },
        { status: 404 }
      );
    }

    return NextResponse.json({
      category: rows[0],
    });
  } catch (err: any) {
    return NextResponse.json(
      { message: "Failed get category", error: err.message },
      { status: 500 }
    );
  }
}

/* ================= UPDATE ================= */
export async function PUT(
  req: Request,
  { params }: { params: Promise<{ id: string }> }
) {
  try {
    // const id = params.id;
    const {id} = await params;
    const body = await req.json();

    const { name, description, is_active } = body;

    await db.query(
      `
      UPDATE categories
      SET 
        name = ?,
        description = ?,
        is_active = ?
      WHERE id = ?
    `,
      [name, description, is_active ? 1 : 0, id]
    );

    return NextResponse.json({
      message: "Category updated",
    });
  } catch (err: any) {
    return NextResponse.json(
      { message: "Failed update category", error: err.message },
      { status: 500 }
    );
  }
}


/* ================= DELETE ================= */
export async function DELETE(
  req: Request,
  { params }: { params: Promise<{ id: string }> }
) {
  try {
    // const id = Number(params.id);
    const { id } = await params;

    const categoryId = Number(id);
    /* ================= CEK PAKAI category_id ================= */
    const [used]: any = await db.query(
      `
      SELECT COUNT(*) as total
      FROM items
      WHERE category_id = ?
      `,
      [categoryId]
    );

    if (used[0].total > 0) {
      return NextResponse.json(
        {
          message:
            "Kategori tidak bisa dihapus karena masih digunakan oleh item",
        },
        { status: 400 }
      );
    }

    /* ================= DELETE CATEGORY ================= */
    await db.query(
      `
      DELETE FROM categories
      WHERE id = ?
      `,
      [categoryId]
    );

    return NextResponse.json({
      success: true,
      message: "Kategori berhasil dihapus",
    });
  } catch (err: any) {
    return NextResponse.json(
      { message: "Gagal hapus kategori", error: err.message },
      { status: 500 }
    );
  }
}