import { useState } from 'react'; import { ArrowLeft } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { useToast } from '@/hooks/use-toast'; import { supabase } from '@/integrations/supabase/client'; import ContactFormFields from './ContactFormFields'; import ContactFormHeader from './ContactFormHeader'; interface ContactFormProps { onBack: () => void; } const ContactForm = ({ onBack }: ContactFormProps) => { const [formData, setFormData] = useState({ assunto: '', motivo: '', mensagem: '', anexo: null as File | null }); const [loading, setLoading] = useState(false); const { toast } = useToast(); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!formData.assunto || !formData.motivo || !formData.mensagem) { toast({ title: "Erro", description: "Por favor, preencha todos os campos obrigatórios.", variant: "destructive" }); return; } setLoading(true); try { let anexoUrl = null; let userId = null; let userEmail = null; // Obter dados do usuário const { data: { user } } = await supabase.auth.getUser(); if (user) { userId = user.id; userEmail = user.email; } // Upload do anexo se existe if (formData.anexo) { const fileExt = formData.anexo.name.split('.').pop(); const fileName = `${Date.now()}.${fileExt}`; const { data: uploadData, error: uploadError } = await supabase.storage .from('anexos-contato') .upload(fileName, formData.anexo); if (uploadError) throw uploadError; const { data: { publicUrl } } = supabase.storage .from('anexos-contato') .getPublicUrl(fileName); anexoUrl = publicUrl; } // Salvar contato no banco const { error } = await supabase .from('contatos') .insert({ assunto: formData.assunto, motivo: formData.motivo, mensagem: formData.mensagem, anexo_url: anexoUrl, user_id: userId, status: 'pendente' }); if (error) throw error; // Enviar dados para o webhook do N8N usando modo no-cors const webhookData = { assunto: formData.assunto, motivo: formData.motivo, mensagem: formData.mensagem, anexo_url: anexoUrl, user_id: userId, user_email: userEmail, data_envio: new Date().toISOString() }; try { console.log("Enviando dados para webhook N8N:", webhookData); // Usando modo no-cors para evitar problema de CORS const webhookResponse = await fetch('https://webhookn8n.innova1001.com.br/webhook/faleconosco', { method: 'POST', mode: 'no-cors', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(webhookData), }); console.log("Dados enviados para webhook N8N com sucesso"); } catch (webhookError) { console.error("Erro ao enviar para webhook N8N:", webhookError); // Não interrompe o fluxo se o webhook falhar } toast({ title: "Mensagem enviada com sucesso!", description: "Sua mensagem foi enviada e nossa equipe irá responder em breve. Você receberá uma resposta no seu e-mail cadastrado. Aguarde nosso retorno!", }); // Reset form setFormData({ assunto: '', motivo: '', mensagem: '', anexo: null }); onBack(); } catch (error) { console.error('Erro ao enviar contato:', error); toast({ title: "Erro", description: "Não foi possível enviar sua mensagem. Tente novamente.", variant: "destructive" }); } finally { setLoading(false); } }; return (