'use client'; import React, { useState } from 'react'; import { motion, AnimatePresence } from 'framer-motion'; import { MapPin, Factory, Zap, CheckCircle2 } from 'lucide-react'; import Image from 'next/image'; export interface Location { id: string; name: string; type: 'hq' | 'branch' | 'project'; x: number; y: number; description: string; details?: string[]; } const defaultLocations: Location[] = [ { id: 'guben', name: 'Guben (Hauptsitz)', type: 'hq', x: 85, y: 48, description: 'E-TIB GmbH Holding & Bohrtechnik GmbH', details: ['Zentrale Steuerung', 'Kabelleitungstiefbau', 'Maschinenpark'], }, { id: 'buelstedt', name: 'Bülstedt (Ingenieurgesellschaft)', type: 'branch', x: 37, y: 25, description: 'E-TIB Ingenieurgesellschaft mbH', details: ['Planung & Projektierung', 'Vermessung', 'Dokumentation'], }, { id: 'spreewald', name: 'Spreewald (Projekt)', type: 'project', x: 82, y: 45, description: 'Breitbandausbau FTTC', }, { id: 'bomlitz', name: 'Bomlitz (Projekt)', type: 'project', x: 45, y: 30, description: 'Breitbandausbau FTTH', }, { id: 'forst', name: 'Forst (Projekt)', type: 'project', x: 88, y: 50, description: 'Neubau Kabeltrasse', }, { id: 'eisenhuettenstadt', name: 'Eisenhüttenstadt (Projekt)', type: 'project', x: 85, y: 40, description: 'Kabelverbindung U30 - T10', }, { id: 'goerne', name: 'Görne (Projekt)', type: 'project', x: 70, y: 35, description: 'Einspeisung PV-Anlage', } ]; interface Stat { value: string; suffix?: string; label: string; } interface InteractiveGermanyMapProps { badge?: string; title?: React.ReactNode; description?: string; stats?: Stat[]; locations?: Location[]; } export function InteractiveGermanyMap({ badge = 'Einsatzgebiete', title = <>Deutschlandweitfür Sie im Einsatz.>, description = 'Von unseren strategischen Standorten in Guben und Bülstedt steuern und realisieren wir komplexe Infrastrukturprojekte im gesamten Bundesgebiet.', stats = [ { value: '100', suffix: '%', label: 'Überregionale Reichweite' }, { value: '2', suffix: '+', label: 'Operative Standorte' }, ], locations = defaultLocations }: InteractiveGermanyMapProps) { const [activeLocation, setActiveLocation] = useState(null); const hq = locations.find((l) => l.type === 'hq'); const branch = locations.find((l) => l.type === 'branch'); const projects = locations.filter((l) => l.type === 'project'); return ( {/* Background Effects */} {/* Content Left */} {badge} {title} {description} {/* Industrial Stats Grid */} {stats.map((stat, i) => ( {stat.value}{stat.suffix} {stat.label} ))} {/* Map Right */} {/* Map Container - Enforce strict aspect ratio matching the SVG (1024x1024) */} {/* Map SVG */} {/* Connections (Lines) */} {hq && branch && ( )} {hq && projects.map((proj, idx) => ( ))} {/* Location Pins */} {locations.map((loc, idx) => { const isHQ = loc.type === 'hq'; const isBranch = loc.type === 'branch'; const isActive = activeLocation?.id === loc.id; return ( setActiveLocation(loc)} onMouseLeave={() => setActiveLocation(null)} > {/* Ping Animation for HQ / Branch */} {(isHQ || isBranch) && ( )} {/* Marker Dot */} {(isHQ || isBranch) && } {/* Tooltip */} {isActive && ( {isHQ ? : } {loc.name} {loc.description} {loc.details && ( {loc.details.map((detail, i) => ( {detail} ))} )} {/* Arrow Down */} )} ); })} ); }
{description}
{loc.description}