import { useQuery, useQueryClient } from '@tanstack/react-query';
import { getCsrfToken } from '@/lib/csrf';

export interface VendorAddress {
  id: string;
  vendorId: string;
  label: string;
  fullAddress: string;
  city: string;
  isPublic: boolean;
}

const QUERY_KEY = ['vendor-addresses'] as const;

async function fetchAddresses(): Promise<VendorAddress[]> {
  const res = await fetch('/api/vendor/addresses', { credentials: 'same-origin' });
  if (!res.ok) throw new Error('Failed to fetch addresses');
  const data = (await res.json()) as { ok: boolean; addresses?: VendorAddress[] };
  return data.addresses ?? [];
}

export function useVendorAddresses() {
  return useQuery({
    queryKey: QUERY_KEY,
    queryFn: fetchAddresses,
    staleTime: 30_000,
  });
}

export function useInvalidateVendorAddresses() {
  const queryClient = useQueryClient();
  return () => queryClient.invalidateQueries({ queryKey: QUERY_KEY });
}

export async function deleteVendorAddress(
  id: string,
): Promise<
  | { ok: true }
  | { ok: false; code: 'ADDRESS_IN_USE'; dealIds: string[] }
  | { ok: false; code: string; error: string }
> {
  const res = await fetch(`/api/vendor/addresses/${id}`, {
    method: 'DELETE',
    headers: { 'x-csrf-token': getCsrfToken() },
    credentials: 'same-origin',
  });
  return res.json() as Promise<
    | { ok: true }
    | { ok: false; code: 'ADDRESS_IN_USE'; dealIds: string[]; error: string }
    | { ok: false; code: string; error: string }
  >;
}
