'use client' import { useState, useEffect } from 'react' import Link from 'next/link' import { Building2, Plus, Trash2, Loader2, Pencil, Mail, MapPin, Search, Users, RefreshCw } from 'lucide-react' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '@/components/ui/dialog' import { getCompanies, createCompany, updateCompany, deleteCompany, syncCompaniesFromLicServer } from '@/lib/actions/companies' export default function CompaniesPage() { const [companies, setCompanies] = useState([]) const [loading, setLoading] = useState(true) const [isOpen, setIsOpen] = useState(false) const [editingCompany, setEditingCompany] = useState(null) const [name, setName] = useState('') const [street, setStreet] = useState('') const [zip, setZip] = useState('') const [city, setCity] = useState('') const [email, setEmail] = useState('') const [creating, setCreating] = useState(false) const [createError, setCreateError] = useState(null) const [deletingId, setDeletingId] = useState(null) const [searchQuery, setSearchQuery] = useState('') const [syncing, setSyncing] = useState(false) const handleSync = async () => { setSyncing(true) try { const res = await syncCompaniesFromLicServer() alert(`${res.count} Partner erfolgreich vom LicServer importiert/aktualisiert.`) loadCompanies() } catch (err: any) { alert(`Fehler beim Import: ${err.message || err}`) } finally { setSyncing(false) } } const loadCompanies = async () => { setLoading(true) try { const data = await getCompanies() setCompanies(data) } catch (err) { console.error('Fehler beim Laden der Partner:', err) } finally { setLoading(false) } } useEffect(() => { loadCompanies() }, []) const handleOpenDialog = (company: any = null) => { setEditingCompany(company) setName(company ? company.name || '' : '') setStreet(company ? company.street || '' : '') setZip(company ? company.zip || '' : '') setCity(company ? company.city || '' : '') setEmail(company ? company.email || '' : '') setCreateError(null) setIsOpen(true) } const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() setCreating(true) setCreateError(null) try { const payload = { name: name.trim(), street: street.trim(), zip: zip.trim(), city: city.trim(), email: email.trim(), } if (editingCompany) { await updateCompany(editingCompany.id, payload) } else { await createCompany(payload) } setIsOpen(false) loadCompanies() } catch (err: any) { setCreateError(err.message || 'Fehler beim Speichern.') } finally { setCreating(false) } } const handleDelete = async (id: string, firmName: string) => { if (!confirm(`Firma "${firmName}" wirklich löschen? Alle zugewiesenen Benutzer werden getrennt.`)) return setDeletingId(id) try { await deleteCompany(id) loadCompanies() } catch (err) { console.error('Fehler beim Löschen:', err) } finally { setDeletingId(null) } } const filteredCompanies = companies.filter((c) => { const nameMatch = c.name?.toLowerCase().includes(searchQuery.toLowerCase()) const addressMatch = `${c.street || ''} ${c.zip || ''} ${c.city || ''}`.toLowerCase().includes(searchQuery.toLowerCase()) const emailMatch = c.email?.toLowerCase().includes(searchQuery.toLowerCase()) return nameMatch || addressMatch || emailMatch }) return (
{/* Header */}

Firmenverwaltung

Verwalten Sie Firmen, deren Lieferadresse und weisen Sie Partner zu.

{/* Firmen-Tabelle */}
setSearchQuery(e.target.value)} className="w-full pl-9 pr-4 py-2 text-sm bg-slate-50 dark:bg-white/5 border border-slate-200 dark:border-white/10 rounded-md text-slate-900 dark:text-slate-200 placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all" />
{loading ? (
Lade Firmen...
) : filteredCompanies.length === 0 ? (
Keine Firmen gefunden.
) : ( {filteredCompanies.map((company) => ( ))}
Firmenname Lieferadresse E-Mail Erstellt am Aktionen
{company.name}
{company.street ? `${company.street}, ${company.zip} ${company.city}` : '–'}
{company.email ? (
{company.email}
) : '–'}
{company.created_at ? new Date(company.created_at).toLocaleDateString('de-DE') : '–'}
)}
{/* Dialog: Firma anlegen / bearbeiten */} {editingCompany ? 'Firma bearbeiten' : 'Neue Firma anlegen'} Geben Sie die Firmendetails und die vollständige Lieferadresse ein. Alle Felder sind Pflichtfelder.
setName(e.target.value)} className="bg-slate-50 dark:bg-white/5 border-slate-200 dark:border-white/10" />
setStreet(e.target.value)} className="bg-slate-50 dark:bg-white/5 border-slate-200 dark:border-white/10" />
setZip(e.target.value)} className="bg-slate-50 dark:bg-white/5 border-slate-200 dark:border-white/10" />
setCity(e.target.value)} className="bg-slate-50 dark:bg-white/5 border-slate-200 dark:border-white/10" />
setEmail(e.target.value)} className="bg-slate-50 dark:bg-white/5 border-slate-200 dark:border-white/10" />
{createError && (

{createError}

)}
) }