import { useState, useEffect } from 'react' import { useNavigate, useParams } from 'react-router-dom' import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query' import { ChevronLeft, ChevronRight } from 'lucide-react' import Button from '@/components/common/Button' import Input from '@/components/common/Input' import LoadingSpinner from '@/components/common/LoadingSpinner' import { TOPICOS_PADRAO } from '@/lib/constants' import { supabase } from '@/lib/supabase' import { updateTemplate } from '@/lib/mutations' import { toast } from '@/lib/toast' export default function TemplateEdit() { const navigate = useNavigate() const { id } = useParams() const queryClient = useQueryClient() const [step, setStep] = useState(1) const [formData, setFormData] = useState({ nome: '', tipo: 'novo' as 'novo' | 'derivado', template_pai_id: null as string | null, topicos_selecionados: [] as string[], descricao: '', }) const { data: template, isLoading } = useQuery({ queryKey: ['template', id], queryFn: async () => { const { data, error } = await supabase .from('templates_customizados') .select('*') .eq('id', id) .single() if (error) throw error return data as any }, enabled: !!id, }) useEffect(() => { if (template) { setFormData({ nome: template.nome, tipo: template.tipo, template_pai_id: template.template_pai_id, topicos_selecionados: template.topicos_selecionados || [], descricao: template.descricao || '', }) } }, [template]) const updateMutation = useMutation({ mutationFn: () => updateTemplate(id!, { nome: formData.nome, topicos_selecionados: formData.topicos_selecionados, descricao: formData.descricao, }), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['templates'] }) queryClient.invalidateQueries({ queryKey: ['template', id] }) toast.success('Template atualizado com sucesso') navigate('/templates') }, onError: () => { toast.error('Erro ao atualizar template') }, }) const handleTopicoToggle = (numero: string) => { setFormData(prev => ({ ...prev, topicos_selecionados: prev.topicos_selecionados.includes(numero) ? prev.topicos_selecionados.filter(t => t !== numero) : [...prev.topicos_selecionados, numero] })) } const handleSelectAll = () => { setFormData(prev => ({ ...prev, topicos_selecionados: TOPICOS_PADRAO.map(t => t.numero) })) } const handleSelectMinimo = () => { setFormData(prev => ({ ...prev, topicos_selecionados: TOPICOS_PADRAO.filter(t => t.obrigatorio).map(t => t.numero) })) } const handleSave = () => { updateMutation.mutate() } if (isLoading) { return (
) } return (

Editar Template

{/* Progress Steps */}
{[1, 2, 3].map((s) => (
= s ? 'bg-primary text-white' : 'bg-gray-200 dark:bg-gray-700 text-gray-600 dark:text-gray-400' }`}> {s}
{s < 3 && (
s ? 'bg-primary' : 'bg-gray-200 dark:bg-gray-700' }`} /> )}
))}
{/* Step 1: Dados Básicos */} {step === 1 && (

Dados Básicos

setFormData(prev => ({ ...prev, nome: e.target.value }))} placeholder="Ex: Padrão Galpão Civil" required />