import { getAdminUser } from "@/lib/auth";
import { NextResponse } from "next/server";

const UPLOAD_ENDPOINT = "http://167.71.224.75:8501/upload";

export async function POST(req: Request) {
  const admin = await getAdminUser();

  if (!admin) {
    return NextResponse.json(
      { success: false, message: "Unauthorized" },
      { status: 401 }
    );
  }

  try {
    const formData = await req.formData();
    const file = formData.get("file");

    if (!file || !(file instanceof File) || file.size === 0) {
      return NextResponse.json(
        { success: false, message: "No file provided" },
        { status: 400 }
      );
    }

    const uploadPayload = new FormData();
    uploadPayload.append("folder", "kuchipudi-exams-content");
    uploadPayload.append("file", file);

    const response = await fetch(UPLOAD_ENDPOINT, {
      method: "POST",
      body: uploadPayload,
      cache: "no-store",
    });

    const responseText = await response.text();

    // Log the raw upstream response so we can see exactly why it failed
    console.error(
      `Upload server responded ${response.status} for file "${file.name}" (${file.type}, ${file.size} bytes):`,
      responseText.slice(0, 500)
    );

    let result: { success?: boolean; url?: string; error?: string; message?: string } = {};

    try {
      result = JSON.parse(responseText);
    } catch {
      // Upstream didn't return JSON (e.g. HTML error page, plain text) — surface raw text instead
      throw new Error(
        `Upload server error (${response.status}): ${responseText.slice(0, 200) || "no response body"}`
      );
    }

    if (!response.ok || !result.success || !result.url) {
      throw new Error(
        result.error || result.message || `Upload failed (${response.status})`
      );
    }

    return NextResponse.json({ success: true, url: result.url });
  } catch (error: any) {
    console.error("Kuchipudi Exams file upload error:", error);
    return NextResponse.json(
      { success: false, message: error.message || "Upload failed" },
      { status: 500 }
    );
  }
}