import { useState, useEffect } from 'react';
import { useTranslation } from 'react-i18next';
import { Helmet } from 'react-helmet-async';
import { MessageSquare } from 'lucide-react';
import FileUploader from '@/components/shared/FileUploader';
import ProgressBar from '@/components/shared/ProgressBar';
import AdSlot from '@/components/layout/AdSlot';
import { useFileUpload } from '@/hooks/useFileUpload';
import { useTaskPolling } from '@/hooks/useTaskPolling';
import { generateToolSchema } from '@/utils/seo';
import { useFileStore } from '@/stores/fileStore';
import { dispatchRatingPrompt } from '@/utils/ratingPrompt';
export default function ChatPdf() {
const { t } = useTranslation();
const [phase, setPhase] = useState<'upload' | 'processing' | 'done'>('upload');
const [question, setQuestion] = useState('');
const [reply, setReply] = useState('');
const {
file, uploadProgress, isUploading, taskId,
error: uploadError, selectFile, startUpload, reset,
} = useFileUpload({
endpoint: '/pdf-ai/chat',
maxSizeMB: 20,
acceptedTypes: ['pdf'],
extraData: { question },
});
const { status, result, error: taskError } = useTaskPolling({
taskId,
onComplete: (r) => {
setPhase('done');
setReply(r.reply || '');
dispatchRatingPrompt('chat-pdf');
},
onError: () => setPhase('done'),
});
const storeFile = useFileStore((s) => s.file);
const clearStoreFile = useFileStore((s) => s.clearFile);
useEffect(() => {
if (storeFile) { selectFile(storeFile); clearStoreFile(); }
}, []); // eslint-disable-line react-hooks/exhaustive-deps
const handleUpload = async () => {
if (!question.trim()) return;
const id = await startUpload();
if (id) setPhase('processing');
};
const handleReset = () => { reset(); setPhase('upload'); setQuestion(''); setReply(''); };
const schema = generateToolSchema({
name: t('tools.chatPdf.title'),
description: t('tools.chatPdf.description'),
url: `${window.location.origin}/tools/chat-pdf`,
});
return (
<>
{t('tools.chatPdf.description')}
{taskError}