"use client" import { useState, useEffect, use } from "react" import { useRouter } from "next/navigation" import { AppLayout } from "@/components/app-layout" import { Button } from "@/components/ui/button" import { Badge } from "@/components/ui/badge" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { ArrowLeft, Calendar, User, Loader2, FileText } from "lucide-react" interface VersionData { id: number tramite_id: number version_nro: string tipo_cambio: string autor: string created_at: string payload: { id: number nombre: string estado: string formas_juridicas?: Array<{ id: number; nombre: string }> organismos?: Array<{ id: number; nombre: string }> jurisdiccion?: { id: number; nombre: string; tipo: string } documentacion?: string paso_a_paso?: string costos?: Array<{ descripcion: string; monto: string; moneda: string }> requiere_certificaciones_externas?: boolean certificaciones_detalle?: string link_guia_oficial?: string donde_se_realiza?: string fecha_realizacion?: string comentarios_internos?: string } } const tipoCambioColors: Record = { "confirmación": "bg-green-500/10 text-green-500 border-green-500/20", "edición menor": "bg-blue-500/10 text-blue-500 border-blue-500/20", "renovación mayor": "bg-orange-500/10 text-orange-500 border-orange-500/20", "creación": "bg-purple-500/10 text-purple-500 border-purple-500/20", } export default function VersionViewPage({ params, }: { params: Promise<{ id: string; versionId: string }> }) { const { id: tramiteId, versionId } = use(params) const router = useRouter() const [version, setVersion] = useState(null) const [isLoading, setIsLoading] = useState(true) const [error, setError] = useState(null) useEffect(() => { const fetchVersion = async () => { try { const token = localStorage.getItem("token") if (!token) throw new Error("No autenticado") const response = await fetch( `${process.env.NEXT_PUBLIC_API_URL}/api/tramites/${tramiteId}/versiones/${versionId}`, { cache: "no-store", headers: { Authorization: `Bearer ${token}`, Accept: "application/json", }, } ) if (!response.ok) throw new Error("Error al cargar la versión") const { data } = await response.json() setVersion(data) } catch (err) { console.error(err) setError("No se pudo cargar la versión del trámite") } finally { setIsLoading(false) } } fetchVersion() }, [tramiteId, versionId]) if (isLoading) { return (
) } if (error || !version) { return (
{error || "No se encontró la versión"}
) } const payload = version.payload return (
{/* Header */}

Versión {version.version_nro}

Vista histórica del trámite

{version.tipo_cambio}
{new Date(version.created_at).toLocaleDateString("es-AR", { year: "numeric", month: "long", day: "numeric", hour: "2-digit", minute: "2-digit", })}
{version.autor || "Sistema"}
{/* Content */}
{/* Basic Info */} Información General Datos del trámite en esta versión

{payload.nombre}

{payload.estado}

{payload.donde_se_realiza || "N/A"}

{payload.formas_juridicas && payload.formas_juridicas.length > 0 && (

{payload.formas_juridicas.map((fj) => fj.nombre).join(", ")}

)} {payload.organismos && payload.organismos.length > 0 && (

{payload.organismos.map((org) => org.nombre).join(", ")}

)} {payload.jurisdiccion && (

{payload.jurisdiccion.nombre}

)} {payload.link_guia_oficial && ( )}
{/* Documentation */} {payload.documentacion && ( Documentación / Requisitos
)} {/* Step by Step */} {payload.paso_a_paso && ( Paso a Paso
)} {/* Certifications */} {payload.requiere_certificaciones_externas && payload.certificaciones_detalle && ( Certificaciones Externas

{payload.certificaciones_detalle}

)} {/* Costs */} {payload.costos && payload.costos.length > 0 && ( Costos
{payload.costos.map((costo, index) => (
{costo.descripcion} {costo.moneda} {costo.monto}
))}
)} {/* Internal Comments */} {payload.comentarios_internos && ( Comentarios Internos

{payload.comentarios_internos}

)}
) }