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

// // Files saved to: public/uploaded/sitesettings/
// const UPLOAD_DIR = path.join(process.cwd(), "public", "uploaded", "sitesettings");

// // Make sure upload folder exists
// if (!fs.existsSync(UPLOAD_DIR)) {
//   fs.mkdirSync(UPLOAD_DIR, { recursive: true });
// }

// const saveFile = async (file: File, prefix: string): Promise<string> => {
//   const ext = file.name.split(".").pop();
//   const filename = `${prefix}_${Date.now()}.${ext}`;
//   const filepath = path.join(UPLOAD_DIR, filename);

//   const buffer = Buffer.from(await file.arrayBuffer());
//   fs.writeFileSync(filepath, buffer);
//   fs.chmodSync(filepath, 0o777);

//   return filename; // Only save filename to DB
// };

// export async function GET() {
//   const admin = await getAdminUser();
//   if (!admin) return NextResponse.json({ success: false }, { status: 401 });

//   const settings = await prisma.site_settings.findFirst();
//   return NextResponse.json({ success: true, data: settings });
// }

// export async function PUT(req: Request) {
//   const admin = await getAdminUser();
//   if (!admin) return NextResponse.json({ success: false }, { status: 401 });

//   try {
//     const formData = await req.formData();

//     const getString = (key: string) => {
//       const val = formData.get(key);
//       return typeof val === "string" ? val : "";
//     };

//     const data: any = {
//       site_name: getString("site_name"),
//       site_contact_number: getString("site_contact_number"),
//       site_contact_email: getString("site_contact_email"),
//       site_contact_address: getString("site_contact_address"),
//       site_facebook_link: getString("site_facebook_link"),
//       site_instagram_link: getString("site_instagram_link"),
//       site_twitter_link: getString("site_twitter_link"),
//       site_youtube_link: getString("site_youtube_link"),
//       site_footer_text: getString("site_footer_text"),
//       site_header_text: getString("site_header_text"),
//       updated_at: new Date(),
//     };

//     const logoFile = formData.get("site_logo");
//     if (logoFile && typeof logoFile !== "string" && logoFile instanceof File) {
//       data.site_logo = await saveFile(logoFile, "site_logo");
//     }

//     const footerLogoFile = formData.get("site_footer_logo");
//     if (footerLogoFile && typeof footerLogoFile !== "string" && footerLogoFile instanceof File) {
//       data.site_footer_logo = await saveFile(footerLogoFile, "footer_logo");
//     }

//     const existing = await prisma.site_settings.findFirst();

//     let settings;

//     if (existing) {
//       settings = await prisma.site_settings.update({
//         where: { id: existing.id },
//         data,
//       });
//     } else {
//       settings = await prisma.site_settings.create({
//         data: {
//           ...data,
//           site_logo: data.site_logo || "",
//         },
//       });
//     }

//     return NextResponse.json({ success: true, data: settings });
//   } catch (err) {
//     console.error("Site settings error:", err);
//     return NextResponse.json({ success: false, message: "Failed to save settings" }, { status: 500 });
//   }
// }

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

const UPLOAD_ENDPOINT = "http://167.71.224.75:8501/upload";
// Do NOT use https://quality-web-developer.com:8501/upload
// unless you have configured SSL on port 8501.


async function uploadToExternalServer(
  file: File,
  folder: string = "sitesettings"
): Promise<string> {
  try {
    const formData = new FormData();

    formData.append("folder", folder);
    formData.append("file", file);

    console.log("Uploading file:", file.name);
    console.log("Folder:", folder);
    console.log("Upload endpoint:", UPLOAD_ENDPOINT);

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

    const responseText = await response.text();

    console.log("Upload Status:", response.status);
    console.log("Upload Response:", responseText);

    if (!response.ok) {
      console.log("Upload Server Error Response:");
      console.log(responseText);

      throw new Error(
        `Upload failed (${response.status}): ${responseText}`
      );
    }
    let result: {
      success: boolean;
      url?: string;
      error?: string;
      message?: string;
    };

    try {
      result = JSON.parse(responseText);
    } catch {
      throw new Error("Invalid JSON response from upload server");
    }

    if (!result.success) {
      throw new Error(
        result.error ||
        result.message ||
        "Upload failed"
      );
    }

    if (!result.url) {
      throw new Error(
        "Upload server did not return file URL"
      );
    }

    return result.url;
  } catch (error) {
    console.error("External upload error:", error);
    throw error;
  }
}

export async function GET() {
  const admin = await getAdminUser();

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

  const settings = await prisma.site_settings.findFirst();

  return NextResponse.json({
    success: true,
    data: settings,
  });
}

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

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

  try {
    const formData = await req.formData();

    const getString = (key: string) => {
      const value = formData.get(key);
      return typeof value === "string" ? value : "";
    };

    const existing = await prisma.site_settings.findFirst();

    const data: any = {
      site_name: getString("site_name"),
      site_contact_number: getString("site_contact_number"),
      site_contact_email: getString("site_contact_email"),
      site_contact_address: getString("site_contact_address"),
      site_facebook_link: getString("site_facebook_link"),
      site_instagram_link: getString("site_instagram_link"),
      site_twitter_link: getString("site_twitter_link"),
      site_youtube_link: getString("site_youtube_link"),
      site_whatsapp_link: getString("site_whatsapp_link"),
      site_footer_text: getString("site_footer_text"),
      site_header_text: getString("site_header_text"),
      updated_at: new Date(),
    };

    // Upload site logo
    const logoFile = formData.get("site_logo");

    if (
      logoFile &&
      typeof logoFile !== "string" &&
      logoFile instanceof File &&
      logoFile.size > 0
    ) {
      data.site_logo = await uploadToExternalServer(
        logoFile,
        "sitesettings"
      );
    } else if (existing?.site_logo) {
      data.site_logo = existing.site_logo;
    }

    // Upload footer logo
    const footerLogoFile = formData.get("site_footer_logo");

    if (
      footerLogoFile &&
      typeof footerLogoFile !== "string" &&
      footerLogoFile instanceof File &&
      footerLogoFile.size > 0
    ) {
      data.site_footer_logo =
        await uploadToExternalServer(
          footerLogoFile,
          "sitesettings"
        );
    } else if (existing?.site_footer_logo) {
      data.site_footer_logo = existing.site_footer_logo;
    }

    // Upload mobile logo
    const mobileLogoFile = formData.get("site_mobile_logo");

    if (
      mobileLogoFile &&
      typeof mobileLogoFile !== "string" &&
      mobileLogoFile instanceof File &&
      mobileLogoFile.size > 0
    ) {
      data.site_mobile_logo = await uploadToExternalServer(
        mobileLogoFile,
        "sitesettings"
      );
    } else if (existing?.site_mobile_logo) {
      data.site_mobile_logo = existing.site_mobile_logo;
    }

    let settings;

    if (existing) {
      settings = await prisma.site_settings.update({
        where: {
          id: existing.id,
        },
        data,
      });
    } else {
      settings = await prisma.site_settings.create({
        data,
      });
    }

    return NextResponse.json({
      success: true,
      data: settings,
    });
  } catch (error: any) {
    console.error("Site settings error:", error);

    return NextResponse.json(
      {
        success: false,
        message: error.message || "Failed to save settings",
      },
      {
        status: 500,
      }
    );
  }
}