import Cookies from "js-cookie";


/**
 * Sends form data including multiple files and text fields
 * Supports both client-side token (legacy) and server-side HTTP-only token
 */
export const postFormData = async (formDataObj: { [key: string]: any }) => {
  const clientToken = Cookies.get("token");
  const formData = new FormData();

  for (const key in formDataObj) {
    const value = formDataObj[key];
    formData.append(key, value);
  }

  try {
    // If client-side token exists, use direct API call
    if (clientToken) {
      const response = await fetch(`${process.env.NEXT_PUBLIC_APP_URL}/co-creation/save`, {
        method: "POST",
        headers: {
          Authorization: `Bearer ${clientToken}`,
        },
        body: formData,
      });

      // Check if response is JSON
      const contentType = response.headers.get('content-type');
      if (!contentType || !contentType.includes('application/json')) {
        console.error(`API Error: Expected JSON but received ${contentType}`, {
          status: response.status,
          statusText: response.statusText,
          url: response.url
        });
        throw new Error(`API returned non-JSON response (${response.status})`);
      }

      const data = await response.json();
      if (!response.ok) throw new Error(data.message || "Something went wrong");

      return data;
    } else {
      // Otherwise, use proxy API (server-side HTTP-only token)
      const response = await fetch(`/api/co-creation/save`, {
        method: "POST",
        credentials: 'include',
        body: formData,
      });

      // Check if response is JSON
      const contentType = response.headers.get('content-type');
      if (!contentType || !contentType.includes('application/json')) {
        console.error(`API Error: Expected JSON but received ${contentType}`);
        throw new Error(`API returned non-JSON response (${response.status})`);
      }

      const data = await response.json();
      if (!response.ok) throw new Error(data.message || "Something went wrong");

      return data;
    }
  } catch (error: any) {
    console.error("API Error:", error.message);
    throw error;
  }
};
