import { apiRequest } from "../apiClient";
import { API_ENDPOINTS } from "../endpoints";

interface ApiResponse<T = any> {
  status: string;
  message: string;
  data?: T;
}

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

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

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

/** Save Test V2 (Main Active Endpoint) */
export async function saveTestV2(payload: any): Promise<ApiResponse> {
  return await apiRequest<ApiResponse>(API_ENDPOINTS.SAVE_TEST_V2, {
    method: "POST",
    body: payload,
  });
}

/** Get Test Result */
export async function getTestResult(
  user_id: string,
  test_id: string,
  course_id: string,
  attempt: string
): Promise<ApiResponse> {
  const formData = new FormData();
  formData.append("user_id", user_id);
  formData.append("test_id", test_id);
  formData.append("course_id", course_id);
  formData.append("first_attempt", attempt);

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

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

/** OLD Save Test */
export async function saveTestOld(payload: any): Promise<ApiResponse> {
  return await apiRequest<ApiResponse>(API_ENDPOINTS.SAVE_TEST_OLD, {
    method: "POST",
    body: JSON.stringify(payload),
  });
}

/** Test Challenge */
export async function submitTestChallenge(payload: any): Promise<ApiResponse> {
  return await apiRequest<ApiResponse>(API_ENDPOINTS.TEST_CHALLENGE, {
    method: "POST",
    body: JSON.stringify(payload),
  });
}

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

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

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

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

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