"use client" import { useState, useEffect } from "react" import { AppLayout } from "@/components/app-layout" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table" import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog" import { Plus, Pencil, Trash2, ArrowLeft, Loader2, AlertCircle } from "lucide-react" import Link from "next/link" import { Textarea } from "@/components/ui/textarea" import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert" interface FormaJuridica { id: number nombre: string codigo?: string descripcion?: string estado: boolean } export default function FormasJuridicasPage() { const [formasJuridicas, setFormasJuridicas] = useState([]) const [isLoading, setIsLoading] = useState(true) const [error, setError] = useState(null) const [isDialogOpen, setIsDialogOpen] = useState(false) const [isDeleteDialogOpen, setIsDeleteDialogOpen] = useState(false) const [editingItem, setEditingItem] = useState(null) const [deletingItem, setDeletingItem] = useState(null) const [formData, setFormData] = useState({ nombre: "", codigo: "", descripcion: "", estado: true }) const [isSaving, setIsSaving] = useState(false) const fetchFormas = async () => { setIsLoading(true) setError(null) try { const token = localStorage.getItem("token") if (!token) throw new Error("No autenticado") const response = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/api/formas-juridicas`, { headers: { Authorization: `Bearer ${token}`, Accept: "application/json", }, }) if (!response.ok) throw new Error("Error al cargar formas jurídicas") const { data } = await response.json() setFormasJuridicas(data) } catch (err) { console.error(err) setError("No se pudieron cargar las formas jurídicas") } finally { setIsLoading(false) } } useEffect(() => { fetchFormas() }, []) const handleAdd = () => { setEditingItem(null) setFormData({ nombre: "", codigo: "", descripcion: "", estado: true }) setIsDialogOpen(true) } const handleEdit = (item: FormaJuridica) => { setEditingItem(item) setFormData({ nombre: item.nombre, codigo: item.codigo || "", descripcion: item.descripcion || "", estado: item.estado }) setIsDialogOpen(true) } const handleDelete = (item: FormaJuridica) => { setDeletingItem(item) setIsDeleteDialogOpen(true) } const handleSave = async () => { setIsSaving(true) try { const token = localStorage.getItem("token") if (!token) throw new Error("No autenticado") const url = editingItem ? `${process.env.NEXT_PUBLIC_API_URL}/api/formas-juridicas/${editingItem.id}` : `${process.env.NEXT_PUBLIC_API_URL}/api/formas-juridicas` const method = editingItem ? "PUT" : "POST" const response = await fetch(url, { method, headers: { "Content-Type": "application/json", Authorization: `Bearer ${token}`, Accept: "application/json", }, body: JSON.stringify(formData), }) if (!response.ok) { const errorData = await response.json() throw new Error(errorData.message || "Error al guardar") } await fetchFormas() setIsDialogOpen(false) } catch (err: any) { console.error(err) alert(err.message || "Error al guardar la forma jurídica") } finally { setIsSaving(false) } } const confirmDelete = async () => { if (!deletingItem) return setIsSaving(true) try { const token = localStorage.getItem("token") if (!token) throw new Error("No autenticado") const response = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/api/formas-juridicas/${deletingItem.id}`, { method: "DELETE", headers: { Authorization: `Bearer ${token}`, Accept: "application/json", }, }) if (!response.ok) throw new Error("Error al eliminar") await fetchFormas() setIsDeleteDialogOpen(false) } catch (err) { console.error(err) alert("Error al eliminar la forma jurídica. Puede que esté en uso.") } finally { setIsSaving(false) setDeletingItem(null) } } return (

Formas Jurídicas

Gestionar los tipos de formas jurídicas disponibles

{error && ( Error {error} )}
{isLoading ? (
) : ( Nombre Abreviatura/Código Descripción Estado Acciones {formasJuridicas.length === 0 ? ( No hay formas jurídicas registradas ) : ( formasJuridicas.map((forma) => ( {forma.nombre} {forma.codigo || "-"} {forma.descripcion || "-"} {forma.estado ? "Activo" : "Inactivo"}
)) )}
)}
{editingItem ? "Editar" : "Agregar"} Forma Jurídica {editingItem ? "Modifica los datos de la forma jurídica" : "Completa los datos para crear una nueva forma jurídica"}
setFormData({ ...formData, nombre: e.target.value })} placeholder="Ej: Sociedad Anónima" />
setFormData({ ...formData, codigo: e.target.value })} placeholder="Ej: SA" />