'use client';

import { useQuery } from '@tanstack/react-query';

import { apiFetch } from '@/lib/api/client';

export interface AggregatedFile {
  id: string;
  filename: string;
  mimeType: string | null;
  createdAt: string;
  folderId: string | null;
  clientId: string | null;
  companyId: string | null;
  yachtId: string | null;
  interestId: string | null;
  /** Multi-berth label of the file's parent interest (e.g. "A1-A3, B5").
   *  Null when the file isn't tied to an interest or when the interest
   *  has no linked berths. Drives the "which deal" badge on each row in
   *  EntityFolderView so reps can disambiguate files on a multi-deal
   *  client. */
  interestBerthLabel: string | null;
  signedFromDocumentId: string | null;
}

export interface AggregatedWorkflow {
  id: string;
  title: string;
  status: string;
  documentType: string;
  updatedAt: string;
  createdAt: string;
}

export interface AggregatedGroup<T> {
  label: string;
  source: 'direct' | 'client' | 'company' | 'yacht';
  files?: T[];
  workflows?: T[];
  total: number;
}

export function useAggregatedFiles(
  entityType: 'client' | 'company' | 'yacht' | undefined,
  entityId: string | undefined,
) {
  return useQuery<AggregatedGroup<AggregatedFile>[]>({
    queryKey: ['files', 'aggregated', entityType, entityId],
    queryFn: () =>
      apiFetch<{ data: { groups: AggregatedGroup<AggregatedFile>[] } }>(
        `/api/v1/files?entityType=${entityType}&entityId=${entityId}`,
      ).then((r) => r.data.groups),
    enabled: Boolean(entityType && entityId),
    staleTime: 10_000,
  });
}

export function useAggregatedWorkflows(
  entityType: 'client' | 'company' | 'yacht' | undefined,
  entityId: string | undefined,
) {
  return useQuery<AggregatedGroup<AggregatedWorkflow>[]>({
    queryKey: ['documents', 'aggregated', entityType, entityId],
    queryFn: () =>
      apiFetch<{ data: { groups: AggregatedGroup<AggregatedWorkflow>[] } }>(
        `/api/v1/documents?entityType=${entityType}&entityId=${entityId}`,
      ).then((r) => r.data.groups),
    enabled: Boolean(entityType && entityId),
    staleTime: 10_000,
  });
}
