"use client"; import { useState, useEffect } from 'react'; import { supabase } from '@/lib/supabase'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Textarea } from '@/components/ui/textarea'; import { Checkbox } from '@/components/ui/checkbox'; import { useRouter } from 'next/navigation'; import { Building, User, Phone, Mail, Calendar, Target, Globe, Palette, Settings, FileText, CheckCircle, AlertCircle, Play, ArrowLeft, Save, Eye, Edit, Users, TrendingUp, Zap, Star } from 'lucide-react'; interface Customer { id: string; berater?: string; firma?: string; ansprechpartn?: string; telefon?: string; email?: string; beschreibung?: string; zielgruppe?: string; website_vorha?: boolean; was_gefaellt_c?: string; ziel_der_websi?: string; seiten_geplant?: string; texte_bilder_v?: boolean; fokus_inhalte?: string; logo_farben_v?: boolean; stilvorbilder?: string; design_wunsch?: string; features_gewu?: string; drittanbieter?: string; selbst_pflegen?: boolean; laufende_betre?: boolean; deadline?: string; projekt_verant?: string; budget?: string; kommunikation?: string; feedback_gesc?: string; beispiellinks?: string; benoetigte_fur?: string; webseiten_ziel?: string; geplante_seite?: string; termin_datum?: string; erstellt_am: string; appointment_status?: 'pending' | 'running' | 'completed'; started_by?: string; started_at?: string; } interface CustomerDetailPageProps { params: { id: string; }; } export default function CustomerDetailPage({ params }: CustomerDetailPageProps) { const [customer, setCustomer] = useState(null); const [loading, setLoading] = useState(true); const [saving, setSaving] = useState(false); const [formData, setFormData] = useState({}); const [activeSection, setActiveSection] = useState('overview'); const router = useRouter(); useEffect(() => { fetchCustomer(); }, [params.id]); const fetchCustomer = async () => { try { console.log('🔍 Fetching customer details:', params.id); const { data, error } = await supabase .from('kunden_projekte') .select('*') .eq('id', params.id) .single(); if (error) { console.error('❌ Error fetching customer:', error); return; } console.log('✅ Customer details fetched:', data); setCustomer(data); setFormData(data); } catch (error) { console.error('❌ Error:', error); } finally { setLoading(false); } }; const updateAppointmentStatus = async (status: 'pending' | 'running' | 'completed') => { try { console.log(`🔄 Updating appointment status to ${status}`); const updateData: any = { appointment_status: status }; if (status === 'running') { updateData.started_by = 'admin@example.com'; updateData.started_at = new Date().toISOString(); } else if (status === 'completed') { updateData.completed_at = new Date().toISOString(); } const { error } = await supabase .from('kunden_projekte') .update(updateData) .eq('id', params.id); if (error) { console.error('❌ Error updating status:', error); return; } console.log('✅ Status updated successfully'); fetchCustomer(); } catch (error) { console.error('❌ Error:', error); } }; const saveCustomerData = async () => { setSaving(true); try { console.log('💾 Saving customer data:', formData); const { error } = await supabase .from('kunden_projekte') .update(formData) .eq('id', params.id); if (error) { console.error('❌ Error updating customer:', error); return; } console.log('✅ Customer updated successfully'); fetchCustomer(); } catch (error) { console.error('❌ Error:', error); } finally { setSaving(false); } }; const handleInputChange = (field: string, value: any) => { setFormData((prev: any) => ({ ...prev, [field]: value })); }; const getStatusBadge = (status: string, startedBy?: string) => { switch (status) { case 'pending': return ( Termin wartet ); case 'running': return (
Termin läuft {startedBy && ( ({startedBy}) )}
); case 'completed': return ( Termin abgeschlossen ); default: return ( Termin wartet ); } }; const getCompletionStatus = () => { if (!customer) return { percentage: 0, filledFields: 0, totalFields: 0 }; const fields = [ customer.firma, customer.ansprechpartn, customer.telefon, customer.email, customer.beschreibung, customer.zielgruppe, customer.ziel_der_websi, customer.seiten_geplant, customer.fokus_inhalte, customer.design_wunsch, customer.features_gewu, customer.budget, customer.deadline ]; const filledFields = fields.filter(field => field && field.trim() !== '').length; const totalFields = fields.length; const percentage = Math.round((filledFields / totalFields) * 100); return { filledFields, totalFields, percentage }; }; if (loading) { return (

Kunden-Projekt

Lade Projektdaten...

); } if (!customer) { return (

Projekt nicht gefunden

Das angeforderte Projekt konnte nicht gefunden werden.

); } const completion = getCompletionStatus(); return (
{/* Header */}

{customer.ansprechpartn || customer.firma || 'Unbekannter Kunde'}

{customer.firma && customer.ansprechpartn ? `${customer.firma} - ${customer.ansprechpartn}` : customer.firma || customer.ansprechpartn}

{getStatusBadge(customer.appointment_status || 'pending', customer.started_by)} {customer.appointment_status === 'pending' && ( )} {customer.appointment_status === 'running' && ( )}
{/* Progress Bar */}

Befragung Fortschritt

{completion.percentage}%
= 80 ? 'bg-green-500' : completion.percentage >= 50 ? 'bg-yellow-500' : 'bg-blue-500' }`} style={{ width: `${completion.percentage}%` }} >

{completion.filledFields} von {completion.totalFields} Feldern ausgefüllt

{/* Navigation Tabs */}
{[ { id: 'overview', label: 'Übersicht', icon: Eye }, { id: 'contact', label: 'Kontaktdaten', icon: User }, { id: 'project', label: 'Projektinfo', icon: FileText }, { id: 'design', label: 'Design & Features', icon: Palette }, { id: 'technical', label: 'Technische Details', icon: Settings }, { id: 'timeline', label: 'Zeitplan & Budget', icon: Calendar } ].map((tab) => ( ))}
{/* Content Sections */}
{/* Overview Section */} {activeSection === 'overview' && (
Projektübersicht

{customer.firma || 'Nicht angegeben'}

{customer.ansprechpartn || 'Nicht angegeben'}

{customer.email || 'Nicht angegeben'}

{customer.telefon || 'Nicht angegeben'}

{customer.beschreibung && (

{customer.beschreibung}

)} {customer.termin_datum && (

{new Date(customer.termin_datum).toLocaleString('de-DE')}

)}
)} {/* Contact Section */} {activeSection === 'contact' && ( Kontaktdaten
handleInputChange('firma', e.target.value)} placeholder="Firmenname" />
handleInputChange('ansprechpartn', e.target.value)} placeholder="Name des Ansprechpartners" />
handleInputChange('email', e.target.value)} placeholder="email@beispiel.de" />
handleInputChange('telefon', e.target.value)} placeholder="+49 123 456789" />
)} {/* Project Section */} {activeSection === 'project' && ( Projektinformationen