"use client" import { useEffect, useState } from "react" import { useRouter } from "next/navigation" import { api } from "@/lib/api" import { Header } from "@/components/Header" import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { Button } from "@/components/ui/button" import { AlertCircle, RefreshCw } from "lucide-react" export default function FileSharingPage() { const router = useRouter() const [activeTab, setActiveTab] = useState<"samba" | "nfs">("samba") const [loading, setLoading] = useState(true) const [saving, setSaving] = useState(false) const [error, setError] = useState(null) const [success, setSuccess] = useState(null) // Samba state const [sambaConfig, setSambaConfig] = useState("") const [sambaConfigOriginal, setSambaConfigOriginal] = useState("") const [sambaEditing, setSambaEditing] = useState(false) // NFS state const [nfsConfig, setNfsConfig] = useState("") const [nfsConfigOriginal, setNfsConfigOriginal] = useState("") const [nfsEditing, setNfsEditing] = useState(false) useEffect(() => { const token = localStorage.getItem("access_token") if (!token) { router.push("/login") return } loadConfigs() }, [router]) const loadConfigs = async () => { try { setLoading(true) setError(null) const samba = await api.getSambaConfig().catch(() => ({ parameters: [] })) // Convert parameters array to key=value format const sambaStr = samba.parameters .map((p: any) => `${p.key} = ${p.value}`) .join("\n") setSambaConfig(sambaStr) setSambaConfigOriginal(sambaStr) setNfsConfig("") setNfsConfigOriginal("") } catch (err) { setError(err instanceof Error ? err.message : "Failed to load configurations") } finally { setLoading(false) } } const handleSambaSave = async () => { try { setSaving(true) setError(null) setSuccess(null) // Parse key=value format to object const parameters: { [key: string]: string } = {} sambaConfig.split("\n").forEach((line) => { const trimmed = line.trim() if (trimmed && !trimmed.startsWith("#") && !trimmed.startsWith(";")) { const [key, ...valueParts] = trimmed.split("=") if (key) { parameters[key.trim()] = valueParts.join("=").trim() } } }) await api.setSambaConfig(parameters) setSambaConfigOriginal(sambaConfig) setSambaEditing(false) setSuccess("Samba configuration saved successfully. Changes applied to registry.") setTimeout(() => setSuccess(null), 3000) // Reload to show updated values setTimeout(() => loadConfigs(), 500) } catch (err) { setError(err instanceof Error ? err.message : "Failed to save Samba configuration") } finally { setSaving(false) } } const handleNfsSave = async () => { try { setSaving(true) setError(null) setSuccess(null) setSuccess("NFS editing coming soon") setTimeout(() => setSuccess(null), 3000) } catch (err) { setError(err instanceof Error ? err.message : "Failed to save NFS configuration") } finally { setSaving(false) } } return (

File Sharing Configuration

Manage Samba (SMB) and NFS global settings

{/* Error Alert */} {error && (
{error}
)} {/* Success Alert */} {success && (
✓ {success}
)} {/* Tabs */}
{/* Samba Tab */} {activeTab === "samba" && ( Samba Global Configuration
{sambaEditing && ( )} {sambaEditing ? ( ) : ( )}
{sambaEditing ? (