import React, { useEffect, useState } from "react"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { Form, FormField, FormItem, FormLabel, FormControl, FormMessage } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { useTemplateForm } from "./hooks/useTemplateForm"; import { ServerTemplateFields } from "./form/ServerTemplateFields"; import { ServiceTemplateFields } from "./form/ServiceTemplateFields"; import { SslTemplateFields } from "./form/SslTemplateFields"; import { ServerThresholdFields } from "./form/ServerThresholdFields"; import { Loader2, ChevronDown } from "lucide-react"; import { ScrollArea } from "@/components/ui/scroll-area"; import { TemplateType, templateTypeConfigs } from "@/services/templateService"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Textarea } from "@/components/ui/textarea"; import {z} from "zod"; interface TemplateDialogProps { open: boolean; templateId: string | null; templateType: TemplateType | null; onOpenChange: (open: boolean) => void; onSuccess: () => void; } export const TemplateDialog: React.FC = ({ open, templateId, templateType: initialTemplateType, onOpenChange, onSuccess, }) => { const [selectedTemplateType, setSelectedTemplateType] = useState(initialTemplateType || 'service'); const { form, isEditMode, isLoadingTemplate, isSubmitting, onSubmit } = useTemplateForm({ templateId, templateType: selectedTemplateType, open, onOpenChange, onSuccess }); // Update template type when prop changes or dialog opens useEffect(() => { if (initialTemplateType) { setSelectedTemplateType(initialTemplateType); } else if (open && !isEditMode) { setSelectedTemplateType('service'); } }, [initialTemplateType, open, isEditMode]); // Handle template type change const handleTemplateTypeChange = (newType: TemplateType) => { if (!isEditMode) { setSelectedTemplateType(newType); form.setValue('templateType', newType); } }; const renderTemplateFields = () => { switch (selectedTemplateType) { case 'server': return ; case 'service': return ; case 'ssl': return ; case 'server_threshold': return ; default: return null; } }; const renderPlaceholderGuide = () => { const config = templateTypeConfigs[selectedTemplateType]; if (!config) return null; return ( Available Placeholders

{config.description}. Use these placeholders in your messages:

{config.placeholders.map((placeholder) => (
{placeholder}
))}
); }; return ( {isEditMode ? "Edit Template" : "Add Template"} {isLoadingTemplate ? (
Loading template data...
) : (
{/* Basic Fields */}
( Template Name )} /> ( Template Type )} /> {selectedTemplateType !== 'server_threshold' && ( ( Custom Placeholder )} /> )}
{selectedTemplateType === 'server_threshold' ? 'Thresholds' : 'Messages'} Placeholders {renderTemplateFields()} {renderPlaceholderGuide()}
)}
); };