import { CreateOrderResponse } from "@/types/donation";
import { apiRequest } from "../apiClient";
import { API_ENDPOINTS } from "../endpoints";

interface ApiResponse<T = any> {
  status: boolean | string; // backend is inconsistent, so allow both
  message: string;
  data?: any;
  razorpay_key?: string;
}

export async function getHomeApi(id: string): Promise<ApiResponse> {
  const formData = new FormData();
  formData.append("user_id", id);
  return await apiRequest<ApiResponse>(API_ENDPOINTS.HOME_API, {
    method: "POST",
    body: formData,
  });
}

export async function registerOlympiad(
  formData: FormData,
): Promise<ApiResponse> {
  return await apiRequest<ApiResponse>(API_ENDPOINTS.OLYMPIAD_REGISTER, {
    method: "POST",
    body: formData,
  });
}

export async function getBasicDetails(): Promise<ApiResponse> {
  return await apiRequest<ApiResponse>(API_ENDPOINTS.GET_BASIC_DETAIL, {
    method: "GET",
    cache: "no-store", // always fetch fresh — privacy policy / T&C can change anytime
  });
}

export async function getTestimonialDetails(): Promise<ApiResponse> {
  return await apiRequest<ApiResponse>(API_ENDPOINTS.TESTIMONIAL, {
    method: "GET",
  });
}

export async function getOlympaidDetails(
  formData: FormData,
): Promise<ApiResponse> {
  return await apiRequest<ApiResponse>(API_ENDPOINTS.GET_OLYMPAID_DETAILS, {
    method: "POST",
    body: formData,
  });
}

export async function getDonationList(): Promise<ApiResponse> {
  return await apiRequest<ApiResponse>(API_ENDPOINTS.GET_DONATION_LIST, {
    method: "POST",
  });
}

export async function createOrder(
  formData: FormData,
): Promise<ApiResponse<CreateOrderResponse>> {
  return await apiRequest<ApiResponse<CreateOrderResponse>>(
    API_ENDPOINTS.CREATE_ORDER,
    {
      method: "POST",
      body: formData,
    },
  );
}

export async function completePayment(
  formData: FormData,
): Promise<ApiResponse> {
  return await apiRequest<ApiResponse>(API_ENDPOINTS.COMPLETE_PAYMENT, {
    method: "POST",
    body: formData,
  });
}

export async function getTransactionHistory(
  formData: FormData,
): Promise<ApiResponse> {
  return await apiRequest<ApiResponse>(API_ENDPOINTS.TRANSACTION_HISTORY, {
    method: "POST",
    body: formData,
  });
}

export async function sendContactMessage(
  formData: FormData,
): Promise<ApiResponse> {
  return await apiRequest<ApiResponse>(API_ENDPOINTS.SEND_CONTACT_MESSAGE, {
    method: "POST",
    body: formData,
  });
}
export async function updateProfile(formData: FormData): Promise<ApiResponse> {
  return await apiRequest<ApiResponse>(API_ENDPOINTS.UPDATE_PROFILE, {
    method: "POST",
    body: formData,
  });
}

// ==================== Announcement APIs ====================

export async function getAllAnnouncements(
  lang: string = "english",
): Promise<ApiResponse> {
  const formData = new FormData();
  formData.append("lang", lang);
  return await apiRequest<ApiResponse>(API_ENDPOINTS.GET_ALL_ANNOUNCEMENTS, {
    method: "POST",
    body: formData,
  });
}

export async function markAnnouncementRead(
  userId: string,
  announcementIds: number[],
): Promise<ApiResponse> {
  const formData = new FormData();
  formData.append("user_id", userId);
  formData.append("announcement_id", announcementIds.join(","));
  return await apiRequest<ApiResponse>(API_ENDPOINTS.MARK_ANNOUNCEMENT_READ, {
    method: "POST",
    body: formData,
  });
}

export async function getAnnouncementReadCount(
  userId: string,
  lang: string = "english",
): Promise<ApiResponse> {
  const formData = new FormData();
  formData.append("user_id", userId);
  formData.append("lang", lang);
  return await apiRequest<ApiResponse>(
    API_ENDPOINTS.GET_ANNOUNCEMENT_READ_COUNT,
    {
      method: "POST",
      body: formData,
    },
  );
}

export async function chatBotApi(formData: FormData): Promise<ApiResponse> {
  return await apiRequest<ApiResponse>(API_ENDPOINTS.CHAT_BOT_API, {
    method: "POST",
    body: formData,
  });
}

export async function getChatHistory(formData: FormData): Promise<ApiResponse> {
  return await apiRequest<ApiResponse>(API_ENDPOINTS.GET_CHAT_HISTORY, {
    method: "POST",
    body: formData,
  });
}

export async function getALlFaq(): Promise<ApiResponse> {
  return await apiRequest<ApiResponse>(API_ENDPOINTS.GET_ALL_FAQ, {
    method: "POST",
  });
}

// ==================== Legal Pages API ====================

export async function getLegalPages(lang: string = "en"): Promise<ApiResponse> {
  const formData = new FormData();
  formData.append("lang", lang);
  return await apiRequest<ApiResponse>(API_ENDPOINTS.GET_LEGAL_PAGES, {
    method: "POST",
    body: formData,
  });
}

// ==================== Email Check API ====================

export async function checkEmailExists(email: string): Promise<ApiResponse> {
  const formData = new FormData();
  formData.append("email", email);
  return await apiRequest<ApiResponse>(API_ENDPOINTS.CHECK_EMAIL, {
    method: "POST",
    body: formData,
  });
}

// ==================== Image Upload API ====================

export async function uploadImage(file: File): Promise<ApiResponse> {
  const formData = new FormData();
  formData.append("folder", "upload");
  formData.append("file", file);

  return await apiRequest<ApiResponse>(API_ENDPOINTS.UPLOAD_IMAGE, {
    method: "POST",
    body: formData,
  });
}
