'use client'; import { useEffect, useState } from 'react'; import { useRouter, useParams } from 'next/navigation'; import { ArrowLeftIcon, CheckCircleIcon } from '@heroicons/react/24/outline'; interface Plan { id: string; name: string; slug: string; description: string; min_users: number; max_users: number; monthly_price: number | null; annual_price: number | null; features: string[]; differentiators: string[]; storage_gb: number; is_active: boolean; created_at: string; } export default function EditPlanPage() { const router = useRouter(); const params = useParams(); const planId = params.id as string; const [loading, setLoading] = useState(true); const [saving, setSaving] = useState(false); const [error, setError] = useState(null); const [success, setSuccess] = useState(false); const [plan, setPlan] = useState(null); const [formData, setFormData] = useState>({}); useEffect(() => { const token = localStorage.getItem('token'); if (!token) { router.push('/login'); return; } fetchPlan(); }, [planId, router]); const fetchPlan = async () => { try { setLoading(true); const token = localStorage.getItem('token'); const response = await fetch(`/api/admin/plans/${planId}`, { headers: { 'Authorization': `Bearer ${token}`, }, }); if (!response.ok) { throw new Error('Erro ao carregar plano'); } const data = await response.json(); setPlan(data.plan); setFormData(data.plan); } catch (err) { setError(err instanceof Error ? err.message : 'Erro ao carregar plano'); } finally { setLoading(false); } }; const handleInputChange = (e: React.ChangeEvent) => { const { name, value, type } = e.target; if (type === 'checkbox') { setFormData(prev => ({ ...prev, [name]: (e.target as HTMLInputElement).checked, })); } else if (type === 'number') { setFormData(prev => ({ ...prev, [name]: value === '' ? null : parseFloat(value), })); } else { setFormData(prev => ({ ...prev, [name]: value, })); } }; const handleSave = async () => { try { setSaving(true); setError(null); setSuccess(false); const token = localStorage.getItem('token'); // Parse features e differentiators const features = (formData.features as any) .split(',') .map((f: string) => f.trim()) .filter((f: string) => f.length > 0); const differentiators = (formData.differentiators as any) .split(',') .map((d: string) => d.trim()) .filter((d: string) => d.length > 0); const payload = { ...formData, features, differentiators, }; const response = await fetch(`/api/admin/plans/${planId}`, { method: 'PUT', headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json', }, body: JSON.stringify(payload), }); if (!response.ok) { const error = await response.json(); throw new Error(error.message || 'Erro ao atualizar plano'); } setSuccess(true); setTimeout(() => setSuccess(false), 3000); } catch (err) { setError(err instanceof Error ? err.message : 'Erro ao atualizar plano'); } finally { setSaving(false); } }; if (loading) { return (

Carregando plano...

); } if (!plan) { return (

Plano não encontrado

); } return (
{/* Header */}

Editar Plano

{plan.name}

{/* Success Message */} {success && (

Plano atualizado com sucesso!

)} {/* Error Message */} {error && (

{error}

)} {/* Form Card */}
{ e.preventDefault(); handleSave(); }}> {/* Row 1: Nome e Slug */}
{/* Descrição */}