'use client'; import { Fragment, useState } from 'react'; import { Dialog, Transition, Tab } from '@headlessui/react'; import { XMarkIcon, BuildingOfficeIcon, MapPinIcon, UserIcon, CheckCircleIcon } from '@heroicons/react/24/outline'; interface CreateAgencyModalProps { isOpen: boolean; onClose: () => void; onSuccess: () => void; } function classNames(...classes: string[]) { return classes.filter(Boolean).join(' '); } export default function CreateAgencyModal({ isOpen, onClose, onSuccess }: CreateAgencyModalProps) { const [loading, setLoading] = useState(false); const [error, setError] = useState(''); const [formData, setFormData] = useState({ // Agência agencyName: '', subdomain: '', cnpj: '', razaoSocial: '', description: '', website: '', industry: '', phone: '', teamSize: '', // Endereço cep: '', state: '', city: '', neighborhood: '', street: '', number: '', complement: '', // Admin adminEmail: '', adminPassword: '', adminName: '', }); const handleChange = (e: React.ChangeEvent) => { setFormData(prev => ({ ...prev, [e.target.name]: e.target.value })); }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setLoading(true); setError(''); try { const response = await fetch('/api/admin/agencies/register', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${localStorage.getItem('token')}`, }, body: JSON.stringify(formData), }); if (!response.ok) { const errorData = await response.text(); throw new Error(errorData || 'Erro ao criar agência'); } onSuccess(); onClose(); // Reset form? } catch (err: any) { setError(err.message); } finally { setLoading(false); } }; const tabs = [ { name: 'Dados Gerais', icon: BuildingOfficeIcon }, { name: 'Endereço', icon: MapPinIcon }, { name: 'Administrador', icon: UserIcon }, ]; return (
Nova Agência

Preencha os dados abaixo para cadastrar uma nova agência parceira.

{error && (
{error}
)}
{tabs.map((tab) => ( classNames( 'w-full rounded-lg py-2.5 text-sm font-medium leading-5 transition-all duration-200', 'ring-white ring-opacity-60 ring-offset-2 ring-offset-[var(--brand-color)] focus:outline-none focus:ring-2', selected ? 'bg-white dark:bg-zinc-800 text-[var(--brand-color)] shadow' : 'text-zinc-500 hover:bg-white/[0.12] hover:text-zinc-700 dark:hover:text-zinc-300' ) } >
{tab.name}
))}
{/* Dados Gerais */}