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 (
Selecionados: {formData.topicos_selecionados.length} / {TOPICOS_PADRAO.length}
Nome
{formData.nome}
Descrição
{formData.descricao}
Tipo
{formData.tipo}
Total de Seções
{formData.topicos_selecionados.length} de {TOPICOS_PADRAO.length}
Seções Obrigatórias
{formData.topicos_selecionados.filter(t => TOPICOS_PADRAO.find(tp => tp.numero === t)?.obrigatorio ).length}