// components/admin/auth/SignUp.tsx - Diseño idéntico al SignIn con verificación de primer admin 'use client'; import { useState, useEffect } from 'react'; import { useRouter } from 'next/navigation'; // Componentes básicos sin dependencias externas import { Loader2, Package, User, Mail, Lock, ArrowLeft, Shield, CheckCircle } from 'lucide-react'; export default function SignUp() { const router = useRouter(); const [formData, setFormData] = useState({ name: '', email: '', password: '' }); const [errors, setErrors] = useState({ name: '', email: '', password: '' }); const [isLoading, setIsLoading] = useState(false); const [isCheckingAdmin, setIsCheckingAdmin] = useState(true); const [hasAdmin, setHasAdmin] = useState(false); // Verificar si ya existe un administrador useEffect(() => { const checkExistingAdmin = async () => { try { const response = await fetch('/api/admin/check-first-admin'); const data = await response.json(); setHasAdmin(data.hasAdmin); } catch (error) { console.error('Error checking admin:', error); // En caso de error, permitir el registro setHasAdmin(false); } finally { setIsCheckingAdmin(false); } }; checkExistingAdmin(); }, []); const validateForm = () => { let isValid = true; const newErrors = { name: '', email: '', password: '' }; // Validar nombre if (!formData.name) { newErrors.name = 'El nombre es requerido'; isValid = false; } // Validar email if (!formData.email) { newErrors.email = 'El email es requerido'; isValid = false; } else if (!/\S+@\S+\.\S+/.test(formData.email)) { newErrors.email = 'El email no es válido'; isValid = false; } // Validar contraseña if (!formData.password) { newErrors.password = 'La contraseña es requerida'; isValid = false; } else if (formData.password.length < 6) { newErrors.password = 'La contraseña debe tener al menos 6 caracteres'; isValid = false; } setErrors(newErrors); return isValid; }; const handleChange = (e: React.ChangeEvent) => { const { id, value } = e.target; setFormData(prev => ({ ...prev, [id]: value })); // Limpiar error al cambiar el valor if (errors[id as keyof typeof errors]) { setErrors(prev => ({ ...prev, [id]: '' })); } }; const signUp = async (e: React.FormEvent) => { e.preventDefault(); if (!validateForm()) { return; } setIsLoading(true); try { const response = await fetch('/api/admin/create-first-admin', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(formData), }); const data = await response.json(); if (response.ok) { // Éxito - redirigir al login alert('¡Administrador creado exitosamente! Ahora puedes iniciar sesión.'); router.push('/admin/login'); } else { // Error del servidor alert(data.error || 'Error al crear el administrador'); } } catch (error) { console.error('Error:', error); alert('Error de conexión. Inténtalo de nuevo.'); } finally { setIsLoading(false); } }; // Mostrar loading mientras verifica si hay admin if (isCheckingAdmin) { return (

Verificando configuración...

); } // Si ya existe un admin, mostrar mensaje de que el registro está deshabilitado if (hasAdmin) { return (
{/* Background */}
{/* Back to home button */}
Volver al inicio

CMS Nova

Sistema Configurado

Registro Deshabilitado

El administrador principal ya ha sido creado. El registro de nuevos usuarios está deshabilitado por seguridad.

Iniciar Sesión

¿Necesitas crear más usuarios? Hazlo desde el panel de administración.

); } // Formulario de registro (solo si no hay admin) - DISEÑO IDÉNTICO AL LOGIN return (
{/* Clean editorial background */}
{/* Subtle floating elements */}
{/* Back to home button */}
{/* Header */}

CMS Nova

Crear Primer Administrador

Configura tu cuenta de administrador

{/* Form Card */}
{/* Name Field */}
{errors.name && (

{errors.name}

)}
{/* Email Field */}
{errors.email && (

{errors.email}

)}
{/* Password Field */}
{errors.password && (

{errors.password}

)}
{/* Submit Button */}
{/* Footer */}

¿Ya tienes una cuenta?{' '}

); }