'use client'; import React, { useState, useEffect } from 'react'; import { supabase } from '@/lib/supabaseClient'; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import { Search, RefreshCw, Building, Calendar, Users, Globe, Euro, Clock, ArrowLeft, Plus, Filter, Download } from "lucide-react"; import { colors } from "@/lib/colors"; interface KundenProjekt { id: string; erstellt_am: string; firma: string; beschreibung: string; zielgruppe: string; website_vorhanden: boolean; stilvorbilder: string; was_gefaellt_gefaellt_nicht: string; ziel_der_website: string; seiten_geplant: string; texte_bilder_vorhanden: boolean; fokus_inhalte: string; logo_farben_vorhanden: boolean; design_wunsch: string; beispiellinks: string; features_gewuenscht: string; drittanbieter: string; selbst_pflegen: boolean; laufende_betreuung: boolean; deadline: string; projekt_verantwortlich: string; budget: string; kommunikationsweg: string; feedback_geschwindigkeit: string; } export default function KundenListePage() { const [kunden, setKunden] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [searchTerm, setSearchTerm] = useState(''); useEffect(() => { fetchKunden(); }, []); async function fetchKunden() { try { setLoading(true); const { data, error } = await supabase .from('kunden_projekte') .select('*') .order('erstellt_am', { ascending: false }); if (error) { setError('Fehler beim Laden der Daten: ' + error.message); } else { setKunden(data || []); } } catch (e: any) { setError('Unbekannter Fehler: ' + e.message); } finally { setLoading(false); } } const filteredKunden = kunden.filter(kunde => kunde.firma?.toLowerCase().includes(searchTerm.toLowerCase()) || kunde.beschreibung?.toLowerCase().includes(searchTerm.toLowerCase()) || kunde.zielgruppe?.toLowerCase().includes(searchTerm.toLowerCase()) ); function formatDate(dateString: string) { return new Date(dateString).toLocaleDateString('de-DE'); } function formatBoolean(value: boolean) { return value ? 'Ja' : 'Nein'; } if (loading) { return (

Lade Kundendaten...

); } if (error) { return (

{error}

); } return (
{/* Header Section */}
{/* Background Pattern */}
{/* Navigation */}

Kundenprojekte

Übersicht aller Kundenprojekte und deren Status

{/* Stats Cards */}

Gesamt Projekte

{kunden.length}

Aktive Projekte

{kunden.filter(k => k.laufende_betreuung).length}

Neue diese Woche

{kunden.filter(k => { const weekAgo = new Date(); weekAgo.setDate(weekAgo.getDate() - 7); return new Date(k.erstellt_am) > weekAgo; }).length}

Durchschnitt Budget

{(() => { const budgets = kunden .filter(k => k.budget) .map(k => parseInt(k.budget.replace(/[^\d]/g, ''))) .filter(b => !isNaN(b)); return budgets.length > 0 ? `${Math.round(budgets.reduce((a, b) => a + b, 0) / budgets.length)}€` : '-'; })()}

{/* Search and Filters */}
setSearchTerm(e.target.value)} className="w-full pl-10 pr-4 py-3 rounded-full border-2 focus:outline-none focus:ring-2 transition-all duration-300" style={{ borderColor: colors.secondary, backgroundColor: colors.white, color: colors.primary }} />
{/* Results */}
{filteredKunden.length === 0 ? (

{searchTerm ? 'Keine Kunden gefunden' : 'Noch keine Kundenprojekte vorhanden'}

{searchTerm ? 'Versuchen Sie einen anderen Suchbegriff.' : 'Erstellen Sie Ihr erstes Kundenprojekt.'}

) : (
{filteredKunden.map((kunde, index) => ( ))}
Firma Erstellt am Zielgruppe Website vorhanden Deadline Budget Status
{kunde.firma}
{kunde.beschreibung}
{formatDate(kunde.erstellt_am)} {kunde.zielgruppe} {formatBoolean(kunde.website_vorhanden)} {kunde.deadline ? formatDate(kunde.deadline) : '-'} {kunde.budget || '-'} {kunde.laufende_betreuung ? 'Aktiv' : 'In Bearbeitung'}
)}
{/* Footer */}

{filteredKunden.length} von {kunden.length} Kundenprojekten

); }