/**
 * useMyPurchases - react-query hook to load the current user's purchases.
 */

'use client';

import { useQuery } from '@tanstack/react-query';
import { qk } from '@/lib/query/keys';
import { createApiClient } from '@/lib/api/typed-client';
import { marketplaceApiContract } from '@/lib/api/marketplace-contract';
import { fetchWithRefresh } from '@/lib/api/refresh-on-401';
import type { PurchaseSummary } from '@/server/schemas/purchase';

export type PurchaseListItem = PurchaseSummary;

export interface MyPurchasesData {
  active: PurchaseListItem[];
  history: PurchaseListItem[];
  /** Total savings in ILS (sum of discounts). */
  totalSavings: number;
  /** Distinct vendor count. */
  businessCount: number;
}

export async function fetchMyPurchases(): Promise<MyPurchasesData> {
  const client = createApiClient(marketplaceApiContract, fetchWithRefresh);
  const data = await client.request('GET', '/api/purchases');
  if (!data.ok) {
    throw new Error((data.error as string | undefined) ?? 'Failed to load purchases');
  }
  return {
    active: data.active as PurchaseListItem[],
    history: data.history as PurchaseListItem[],
    totalSavings: data.totalSavings,
    businessCount: data.businessCount,
  };
}

/**
 * Hook to load the current user's purchases.
 *
 * @example
 * ```tsx
 * const { data, isLoading, isError } = useMyPurchases();
 * ```
 */
export function useMyPurchases() {
  return useQuery<MyPurchasesData>({
    queryKey: qk.purchases(),
    queryFn: fetchMyPurchases,
    staleTime: 60_000, // 1 minute
  });
}
