import { useState } from 'react';
import { useTranslation } from 'react-i18next';
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
import { Loader2, Plus, Printer, ExternalLink, AlertTriangle, Info, FileText } from 'lucide-react';
import { multiVirtualPrinterApi, virtualPrinterApi } from '../api/client';
import { Card, CardContent } from './Card';
import { Button } from './Button';
import { Toggle } from './Toggle';
import { useToast } from '../contexts/ToastContext';
import { VirtualPrinterCard } from './VirtualPrinterCard';
import { VirtualPrinterAddDialog } from './VirtualPrinterAddDialog';
export function VirtualPrinterList() {
const { t } = useTranslation();
const queryClient = useQueryClient();
const { showToast } = useToast();
const [showAddDialog, setShowAddDialog] = useState(false);
const { data, isLoading } = useQuery({
queryKey: ['virtual-printers'],
queryFn: multiVirtualPrinterApi.list,
refetchInterval: 10000,
});
const { data: globalSettings } = useQuery({
queryKey: ['virtual-printer-settings'],
queryFn: virtualPrinterApi.getSettings,
});
const archiveNameSourceMutation = useMutation({
mutationFn: (source: 'metadata' | 'filename') =>
virtualPrinterApi.updateSettings({ archive_name_source: source }),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['virtual-printer-settings'] });
showToast(t('virtualPrinter.toast.updated'));
},
onError: (error: Error) => {
showToast(error.message || t('virtualPrinter.toast.failedToUpdate'), 'error');
},
});
const useFilename = globalSettings?.archive_name_source === 'filename';
if (isLoading) {
return (
{t('virtualPrinter.setupRequired.title')}
{t('virtualPrinter.setupRequired.description')}
{t('virtualPrinter.howItWorks.title')}
{t('virtualPrinter.archiveNameSource.title')}
{t('virtualPrinter.archiveNameSource.description')}
{t('virtualPrinter.list.empty')}