'use client'; import { useState } from 'react'; import { Dialog, DialogContent, DialogHeader, DialogTitle, } from '@/components/ui/dialog'; import { Button } from '@/components/ui/button'; import { Card } from '@/components/ui/card'; import { NumberingTemplate, numberingApi } from '@/lib/api/numbering'; import { Loader2 } from 'lucide-react'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select'; import { useOrganizations, useCorrespondenceTypes, useDisciplines, useContracts } from '@/hooks/use-master-data'; import { Organization } from '@/types/organization'; // Local interfaces for Master Data since centralized ones are missing/fragmented interface CorrespondenceType { id: number; typeCode: string; typeName: string; } interface Discipline { id: number; disciplineCode: string; } interface TemplateTesterProps { open: boolean; onOpenChange: (open: boolean) => void; template: NumberingTemplate | null; } export function TemplateTester({ open, onOpenChange, template }: TemplateTesterProps) { const [testData, setTestData] = useState({ originatorId: "", recipientId: "", correspondenceTypeId: "", disciplineId: "", year: new Date().getFullYear(), }); const [generatedNumber, setGeneratedNumber] = useState(''); const [loading, setLoading] = useState(false); // Master Data Hooks const projectId = template?.projectId || 1; const { data: organizations } = useOrganizations({ isActive: true }); const { data: correspondenceTypes } = useCorrespondenceTypes(); const { data: contracts } = useContracts(projectId); // Use first contract ID for disciplines, fallback to 1 or undefined const contractId = contracts?.[0]?.id; const { data: disciplines } = useDisciplines(contractId); const handleGenerate = async () => { if (!template) return; setLoading(true); try { const result = await numberingApi.previewNumber({ projectId: projectId, originatorId: parseInt(testData.originatorId || "0"), recipientOrganizationId: parseInt(testData.recipientId || "0"), typeId: parseInt(testData.correspondenceTypeId || "0"), disciplineId: parseInt(testData.disciplineId || "0"), }); setGeneratedNumber(result.previewNumber); } catch (error: any) { console.error("Failed to generate test number", error); setGeneratedNumber(""); // Assuming toast is available globally or we can use console for now, // but better to show visible error. // Alert is primitive but effective for 'tester' component debugging if toast not imported. // Actually, let's just set the error string in display if we can, or add a simple red text. setGeneratedNumber(`Error: ${error.response?.data?.message || error.message || "Unknown error"}`); } finally { setLoading(false); } }; return ( Test Number Generation
Template: {template?.formatTemplate}

Template Tester

Test Parameters

{/* Originator */}
{/* Recipient */}
{/* Document Type */}
{/* Discipline */}

Format Preview: {template?.formatTemplate}

{generatedNumber && (

{generatedNumber.startsWith('Error:') ? 'Generation Failed:' : 'Generated Number:'}

{generatedNumber}

)}
); }