'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 { Badge } from '@/components/ui/badge'; 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 [testResult, setTestResult] = useState<{ number: string; isDefault?: boolean } | null>(null); const [loading, setLoading] = useState(false); // Master Data Hooks const templateWithProject = template as (NumberingTemplate & { project?: { id?: number; uuid?: string } }) | null; const projectId = templateWithProject?.project?.id ?? templateWithProject?.project?.uuid ?? 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); setTestResult(null); try { const payload = { projectId: projectId, originatorOrganizationId: testData.originatorId || "0", recipientOrganizationId: testData.recipientId || "0", correspondenceTypeId: parseInt(testData.correspondenceTypeId || "0"), disciplineId: parseInt(testData.disciplineId || "0"), year: testData.year }; console.log("TemplateTester: Sending payload:", payload); const result = await numberingApi.previewNumber(payload); console.log("TemplateTester: Received result:", result); setTestResult({ number: result.previewNumber, isDefault: result.isDefault }); } catch (error: any) { console.error("Test Preview Error:", error); const errMsg = error?.response?.data?.message || error?.message || "Unknown error"; setTestResult({ number: `Error: ${errMsg}`, isDefault: false }); } finally { setLoading(false); } }; return ( Test Number Generation
Template: {template?.formatTemplate}

Template Tester

Test Parameters

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

Format Preview: {template?.formatTemplate}

{testResult && (

{(testResult.number || '').startsWith('Error:') ? 'Generation Failed:' : 'Generated Number:'}

{testResult.isDefault && !(testResult.number || '').startsWith('Error:') && ( Default Template )} {!testResult.isDefault && !(testResult.number || '').startsWith('Error:') && ( Specific Template )}
{testResult.number || (
Empty Result. Raw: {JSON.stringify(testResult, null, 2)}
)}
)}
); }