"use client"; import { useEffect, useState } from "react"; import { useTheme } from "next-themes"; import { Settings, Palette, Globe, Server, CheckCircle2, XCircle, RefreshCw, Monitor, Sun, Moon, Info } from "lucide-react"; import { Card, CardContent, CardHeader, CardTitle, CardDescription } from "@/components/ui/card"; import { Label } from "@/components/ui/label"; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import { Separator } from "@/components/ui/separator"; import { Skeleton } from "@/components/ui/skeleton"; import { toast } from "sonner"; import { dolibarrFetch } from "@/lib/dolibarrClient"; interface ConnectionStatus { connected: boolean; url: string; version?: string; error?: string; } export default function ConfiguracionPage() { const { theme, setTheme } = useTheme(); const [mounted, setMounted] = useState(false); const [connectionStatus, setConnectionStatus] = useState(null); const [isTestingConnection, setIsTestingConnection] = useState(false); useEffect(() => { setMounted(true); testConnection(); }, []); const testConnection = async () => { setIsTestingConnection(true); const apiUrl = process.env.NEXT_PUBLIC_API_URL || "No configurada"; try { const status = await dolibarrFetch("status"); setConnectionStatus({ connected: true, url: apiUrl, version: status?.success?.dolibarr_version || status?.dolibarr_version || "Desconocida", }); toast.success("Conexion verificada con Dolibarr"); } catch (err) { console.error("Connection test failed:", err); setConnectionStatus({ connected: false, url: apiUrl, error: err instanceof Error ? err.message : "Error desconocido", }); toast.error("No se pudo conectar con Dolibarr"); } finally { setIsTestingConnection(false); } }; const themeOptions = [ { value: "light", label: "Claro", icon: Sun, description: "Tema claro" }, { value: "dark", label: "Oscuro", icon: Moon, description: "Tema oscuro" }, { value: "system", label: "Sistema", icon: Monitor, description: "Seguir preferencia del sistema" }, ]; return (
{/* Header */}

Ajustes

Configuracion de la aplicacion y conexion con Dolibarr

{/* Theme */} Apariencia Personaliza el aspecto visual de la aplicacion
{mounted && themeOptions.map((option) => { const isSelected = theme === option.value; const Icon = option.icon; return ( ); })} {!mounted && ( <> {[1, 2, 3].map((i) => ( ))} )}
{/* Dolibarr Connection */} Conexion con Dolibarr Estado de la conexion con el servidor Dolibarr {/* Connection status */}
{isTestingConnection ? ( ) : connectionStatus?.connected ? ( ) : ( )}

{isTestingConnection ? "Verificando conexion..." : connectionStatus?.connected ? "Conectado" : "Desconectado"}

{connectionStatus?.url || "Verificando..."}

{/* Connection details */} {connectionStatus && ( <>
{connectionStatus.connected && connectionStatus.version && ( )} {connectionStatus.error && (

{connectionStatus.error}

)}
)}
{/* App Info */} Informacion de la Aplicacion {/* Locale / Language */} Idioma y Region Configuracion regional de la aplicacion
); } function DetailRow({ label, value, badge, badgeVariant, }: { label: string; value: string; badge?: boolean; badgeVariant?: "success" | "error"; }) { return (
{label} {badge ? ( {value} ) : ( {value} )}
); }