'use client' import { trpc } from '@/lib/trpc/client' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' import { Skeleton } from '@/components/ui/skeleton' import { FileText } from 'lucide-react' import { FileViewer } from '@/components/shared/file-viewer' interface MultiWindowDocViewerProps { roundId: string projectId: string } export function MultiWindowDocViewer({ roundId, projectId }: MultiWindowDocViewerProps) { const { data: files, isLoading } = trpc.file.listByProject.useQuery( { projectId }, { enabled: !!projectId } ) if (isLoading) { return ( ) } if (!files || files.length === 0) { return ( Documents Project files and submissions

No files uploaded

) } // Group files by round name for the grouped view const groupMap: Record = {} for (const file of files) { const rId = file.requirement?.round?.id ?? (file as any).roundId ?? null const roundName = file.requirement?.round?.name ?? (rId ? 'Round Files' : 'General') const sortOrder = file.requirement?.round?.sortOrder ?? 999 if (!groupMap[roundName]) { groupMap[roundName] = { roundId: rId, roundName, sortOrder, files: [] } } groupMap[roundName].files.push(file) } const groupedFiles = Object.values(groupMap) // If only one group, use flat view if (groupedFiles.length === 1) { const mappedFiles = files.map((f) => ({ id: f.id, fileType: (f.fileType ?? 'OTHER') as 'EXEC_SUMMARY' | 'PRESENTATION' | 'VIDEO' | 'OTHER' | 'BUSINESS_PLAN' | 'VIDEO_PITCH' | 'SUPPORTING_DOC', fileName: f.fileName, mimeType: f.mimeType, size: f.size, bucket: f.bucket, objectKey: f.objectKey, version: f.version ?? undefined, requirementId: f.requirementId, requirement: f.requirement ? { id: f.requirement.id, name: f.requirement.name, description: f.requirement.description, isRequired: f.requirement.isRequired, } : undefined, pageCount: (f as any).pageCount ?? undefined, textPreview: (f as any).textPreview ?? undefined, detectedLang: (f as any).detectedLang ?? undefined, langConfidence: (f as any).langConfidence ?? undefined, analyzedAt: (f as any).analyzedAt ?? undefined, })) return } // Multiple groups — use grouped view const mappedGroups = groupedFiles.map((g) => ({ roundId: g.roundId, roundName: g.roundName, sortOrder: g.sortOrder, files: g.files.map((f) => ({ id: f.id, fileType: (f.fileType ?? 'OTHER') as 'EXEC_SUMMARY' | 'PRESENTATION' | 'VIDEO' | 'OTHER' | 'BUSINESS_PLAN' | 'VIDEO_PITCH' | 'SUPPORTING_DOC', fileName: f.fileName, mimeType: f.mimeType, size: f.size, bucket: f.bucket, objectKey: f.objectKey, version: f.version ?? undefined, requirementId: f.requirementId, requirement: f.requirement ? { id: f.requirement.id, name: f.requirement.name, description: f.requirement.description, isRequired: f.requirement.isRequired, } : undefined, pageCount: (f as any).pageCount ?? undefined, textPreview: (f as any).textPreview ?? undefined, detectedLang: (f as any).detectedLang ?? undefined, langConfidence: (f as any).langConfidence ?? undefined, analyzedAt: (f as any).analyzedAt ?? undefined, })), })) return }