import { useInfiniteQuery } from "@tanstack/react-query";
import { apiClient } from "@/lib/api-client";
import { TLogResponse } from "@/services/types/logs.type";

type TUseInfiniteLogsQueryParams = {
  dateRangeDateFrom?: Date;
  dateRangeDateTo?: Date;
  searchValue?: string;
  activeTab?: string;
};

export const useInfiniteLogsQuery = ({
  dateRangeDateFrom,
  dateRangeDateTo,
  searchValue,
  activeTab,
}: TUseInfiniteLogsQueryParams) => {
  return useInfiniteQuery<TLogResponse, Error>({
    queryKey: [
      'logs',
      dateRangeDateFrom?.toISOString() ?? "",
      dateRangeDateTo?.toISOString() ?? "",
      searchValue ?? "",
      activeTab ?? "all",
    ],
    queryFn: async ({ pageParam = null }) => {
      // If pageParam exists (extra pages), use it directly.
      if (pageParam && typeof pageParam === 'string') {
        // Extract relative path number from full URL
        const url = new URL(pageParam);
        const relativePath = url.pathname + url.search;
        const response = await apiClient.get<TLogResponse>(relativePath);
        return response;
      }

      // If it's the first page, use transactions.
      const params = {
        dateRangeDateFrom: dateRangeDateFrom ? dateRangeDateFrom.toISOString() : undefined,
        dateRangeDateTo: dateRangeDateTo ? dateRangeDateTo.toISOString() : undefined,
        searchValue: searchValue || undefined,
        action: activeTab === 'all' ? undefined : activeTab?.toUpperCase(),
      };

      const response = await apiClient.get<TLogResponse>('/api/home/logs/', {
        params,
      });
      return response;
    },
    getNextPageParam: (lastPage) => {
      return lastPage.next || undefined;
    },
    refetchOnWindowFocus: false,
    // refetchOnMount: true,
    // staleTime: 0,
    initialPageParam: null,
  });
};