import { NextResponse } from "next/server";
import { getFile, putFile, deleteFile } from "@/lib/github";

function checkAdmin(request) {
  const token = request.headers.get("x-admin-token");
  return token && token === process.env.ADMIN_PASSWORD;
}

/** GET /api/github/file?path=... — fetch file content */
export async function GET(request) {
  const { searchParams } = new URL(request.url);
  const path = searchParams.get("path");
  if (!path)
    return NextResponse.json({ error: "path required" }, { status: 400 });
  try {
    const file = await getFile(path);
    return NextResponse.json(file);
  } catch (err) {
    return NextResponse.json({ error: err.message }, { status: 500 });
  }
}

/** PUT /api/github/file — create or update a text file */
export async function PUT(request) {
  if (!checkAdmin(request)) {
    return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
  }
  const { path, content, sha, message } = await request.json();
  if (!path || content === undefined) {
    return NextResponse.json(
      { error: "path and content required" },
      { status: 400 },
    );
  }
  try {
    const result = await putFile(path, content, sha, message);
    return NextResponse.json(result);
  } catch (err) {
    return NextResponse.json({ error: err.message }, { status: 500 });
  }
}

/** DELETE /api/github/file — delete a file */
export async function DELETE(request) {
  if (!checkAdmin(request)) {
    return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
  }
  const { path, sha, message } = await request.json();
  if (!path || !sha) {
    return NextResponse.json(
      { error: "path and sha required" },
      { status: 400 },
    );
  }
  try {
    const result = await deleteFile(path, sha, message);
    return NextResponse.json(result);
  } catch (err) {
    return NextResponse.json({ error: err.message }, { status: 500 });
  }
}