'use client'

import React, { useState } from 'react'
import Link from 'next/link'
import { usePathname } from 'next/navigation'
import { useSDK } from '@/lib/sdk'
import { StepHeader, STEP_EXPLANATIONS } from '@/components/sdk/StepHeader'
import {
  Database,
  FileText,
  Cookie,
  Clock,
  LayoutGrid,
  X,
  History,
  Shield,
  AlertTriangle,
  CheckCircle,
  XCircle,
  Monitor,
  Globe,
  Calendar,
  User,
  FileCheck,
} from 'lucide-react'

// =============================================================================
// NAVIGATION TABS
// =============================================================================

const EINWILLIGUNGEN_TABS = [
  {
    id: 'overview',
    label: 'Übersicht',
    href: '/sdk/einwilligungen',
    icon: LayoutGrid,
    description: 'Consent-Tracking Dashboard',
  },
  {
    id: 'catalog',
    label: 'Datenpunktkatalog',
    href: '/sdk/einwilligungen/catalog',
    icon: Database,
    description: '18 Kategorien, 128 Datenpunkte',
  },
  {
    id: 'privacy-policy',
    label: 'DSI Generator',
    href: '/sdk/einwilligungen/privacy-policy',
    icon: FileText,
    description: 'Datenschutzinformation erstellen',
  },
  {
    id: 'cookie-banner',
    label: 'Cookie-Banner',
    href: '/sdk/einwilligungen/cookie-banner',
    icon: Cookie,
    description: 'Cookie-Consent konfigurieren',
  },
  {
    id: 'retention',
    label: 'Löschmatrix',
    href: '/sdk/einwilligungen/retention',
    icon: Clock,
    description: 'Aufbewahrungsfristen verwalten',
  },
]

function EinwilligungenNavTabs() {
  const pathname = usePathname()

  return (
    <div className="bg-white rounded-xl border border-gray-200 p-2 mb-6">
      <div className="flex flex-wrap gap-2">
        {EINWILLIGUNGEN_TABS.map((tab) => {
          const Icon = tab.icon
          const isActive = pathname === tab.href

          return (
            <Link
              key={tab.id}
              href={tab.href}
              className={`flex items-center gap-3 px-4 py-3 rounded-lg transition-all ${
                isActive
                  ? 'bg-purple-100 text-purple-900 shadow-sm'
                  : 'text-gray-600 hover:bg-gray-100 hover:text-gray-900'
              }`}
            >
              <Icon className={`w-5 h-5 ${isActive ? 'text-purple-600' : 'text-gray-400'}`} />
              <div>
                <div className={`font-medium text-sm ${isActive ? 'text-purple-900' : ''}`}>
                  {tab.label}
                </div>
                <div className="text-xs text-gray-500">{tab.description}</div>
              </div>
            </Link>
          )
        })}
      </div>
    </div>
  )
}

// =============================================================================
// TYPES
// =============================================================================

type ConsentType = 'marketing' | 'analytics' | 'newsletter' | 'terms' | 'privacy' | 'cookies'
type ConsentStatus = 'granted' | 'withdrawn' | 'pending'
type HistoryAction = 'granted' | 'withdrawn' | 'version_update' | 'renewed'

interface ConsentHistoryEntry {
  id: string
  action: HistoryAction
  timestamp: Date
  version: string
  documentTitle?: string
  ipAddress: string
  userAgent: string
  source: string
  notes?: string
}

interface ConsentRecord {
  id: string
  identifier: string
  email: string
  firstName?: string
  lastName?: string
  consentType: ConsentType
  status: ConsentStatus
  currentVersion: string
  grantedAt: Date | null
  withdrawnAt: Date | null
  source: string | null
  ipAddress: string
  userAgent: string
  history: ConsentHistoryEntry[]
}

// =============================================================================
// MOCK DATA WITH HISTORY
// =============================================================================

const mockRecords: ConsentRecord[] = [
  {
    id: 'c-1',
    identifier: 'usr-001',
    email: 'max.mustermann@example.de',
    firstName: 'Max',
    lastName: 'Mustermann',
    consentType: 'terms',
    status: 'granted',
    currentVersion: '2.1',
    grantedAt: new Date('2024-01-15T10:23:45'),
    withdrawnAt: null,
    source: 'Website-Formular',
    ipAddress: '192.168.1.45',
    userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36',
    history: [
      {
        id: 'h-1-1',
        action: 'granted',
        timestamp: new Date('2023-06-01T14:30:00'),
        version: '1.0',
        documentTitle: 'AGB Version 1.0',
        ipAddress: '192.168.1.42',
        userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_0)',
        source: 'App-Registrierung',
      },
      {
        id: 'h-1-2',
        action: 'version_update',
        timestamp: new Date('2023-09-15T09:15:00'),
        version: '1.5',
        documentTitle: 'AGB Version 1.5 - DSGVO Update',
        ipAddress: '192.168.1.43',
        userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)',
        source: 'E-Mail Bestätigung',
        notes: 'Nutzer hat neuen AGB nach DSGVO-Anpassung zugestimmt',
      },
      {
        id: 'h-1-3',
        action: 'version_update',
        timestamp: new Date('2024-01-15T10:23:45'),
        version: '2.1',
        documentTitle: 'AGB Version 2.1 - KI-Klauseln',
        ipAddress: '192.168.1.45',
        userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36',
        source: 'Website-Formular',
        notes: 'Zustimmung zu neuen KI-Nutzungsbedingungen',
      },
    ],
  },
  {
    id: 'c-2',
    identifier: 'usr-001',
    email: 'max.mustermann@example.de',
    firstName: 'Max',
    lastName: 'Mustermann',
    consentType: 'marketing',
    status: 'granted',
    currentVersion: '1.3',
    grantedAt: new Date('2024-01-15T10:23:45'),
    withdrawnAt: null,
    source: 'Website-Formular',
    ipAddress: '192.168.1.45',
    userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36',
    history: [
      {
        id: 'h-2-1',
        action: 'granted',
        timestamp: new Date('2024-01-15T10:23:45'),
        version: '1.3',
        ipAddress: '192.168.1.45',
        userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36',
        source: 'Website-Formular',
      },
    ],
  },
  {
    id: 'c-3',
    identifier: 'usr-002',
    email: 'anna.schmidt@example.de',
    firstName: 'Anna',
    lastName: 'Schmidt',
    consentType: 'newsletter',
    status: 'withdrawn',
    currentVersion: '1.2',
    grantedAt: new Date('2023-11-20T16:45:00'),
    withdrawnAt: new Date('2024-01-10T08:30:00'),
    source: 'App',
    ipAddress: '10.0.0.88',
    userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_0)',
    history: [
      {
        id: 'h-3-1',
        action: 'granted',
        timestamp: new Date('2023-11-20T16:45:00'),
        version: '1.2',
        ipAddress: '10.0.0.88',
        userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_0)',
        source: 'App',
      },
      {
        id: 'h-3-2',
        action: 'withdrawn',
        timestamp: new Date('2024-01-10T08:30:00'),
        version: '1.2',
        ipAddress: '10.0.0.92',
        userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_2)',
        source: 'Profil-Einstellungen',
        notes: 'Nutzer hat Newsletter-Abo über Profil deaktiviert',
      },
    ],
  },
  {
    id: 'c-4',
    identifier: 'usr-003',
    email: 'peter.meier@example.de',
    firstName: 'Peter',
    lastName: 'Meier',
    consentType: 'privacy',
    status: 'granted',
    currentVersion: '3.0',
    grantedAt: new Date('2024-01-20T11:00:00'),
    withdrawnAt: null,
    source: 'Cookie-Banner',
    ipAddress: '172.16.0.55',
    userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
    history: [
      {
        id: 'h-4-1',
        action: 'granted',
        timestamp: new Date('2023-03-10T09:00:00'),
        version: '2.0',
        documentTitle: 'Datenschutzerklärung v2.0',
        ipAddress: '172.16.0.50',
        userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)',
        source: 'Registrierung',
      },
      {
        id: 'h-4-2',
        action: 'version_update',
        timestamp: new Date('2023-08-01T14:00:00'),
        version: '2.5',
        documentTitle: 'Datenschutzerklärung v2.5 - Cookie-Update',
        ipAddress: '172.16.0.52',
        userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)',
        source: 'Cookie-Banner',
        notes: 'Zustimmung nach Cookie-Richtlinien-Update',
      },
      {
        id: 'h-4-3',
        action: 'version_update',
        timestamp: new Date('2024-01-20T11:00:00'),
        version: '3.0',
        documentTitle: 'Datenschutzerklärung v3.0 - AI Act Compliance',
        ipAddress: '172.16.0.55',
        userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
        source: 'Cookie-Banner',
        notes: 'Neue DSI mit AI Act Transparenzhinweisen',
      },
    ],
  },
  {
    id: 'c-5',
    identifier: 'usr-004',
    email: 'lisa.weber@example.de',
    firstName: 'Lisa',
    lastName: 'Weber',
    consentType: 'analytics',
    status: 'granted',
    currentVersion: '1.0',
    grantedAt: new Date('2024-01-18T13:22:00'),
    withdrawnAt: null,
    source: 'Cookie-Banner',
    ipAddress: '192.168.2.100',
    userAgent: 'Mozilla/5.0 (Linux; Android 14) AppleWebKit/537.36',
    history: [
      {
        id: 'h-5-1',
        action: 'granted',
        timestamp: new Date('2024-01-18T13:22:00'),
        version: '1.0',
        ipAddress: '192.168.2.100',
        userAgent: 'Mozilla/5.0 (Linux; Android 14) AppleWebKit/537.36',
        source: 'Cookie-Banner',
      },
    ],
  },
  {
    id: 'c-6',
    identifier: 'usr-005',
    email: 'thomas.klein@example.de',
    firstName: 'Thomas',
    lastName: 'Klein',
    consentType: 'cookies',
    status: 'granted',
    currentVersion: '1.8',
    grantedAt: new Date('2024-01-22T09:15:00'),
    withdrawnAt: null,
    source: 'Cookie-Banner',
    ipAddress: '10.1.0.200',
    userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 14_0) Safari/605.1.15',
    history: [
      {
        id: 'h-6-1',
        action: 'granted',
        timestamp: new Date('2023-05-10T10:00:00'),
        version: '1.0',
        ipAddress: '10.1.0.150',
        userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 13_0)',
        source: 'Cookie-Banner',
      },
      {
        id: 'h-6-2',
        action: 'withdrawn',
        timestamp: new Date('2023-08-20T15:30:00'),
        version: '1.0',
        ipAddress: '10.1.0.160',
        userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 13_0)',
        source: 'Cookie-Einstellungen',
        notes: 'Nutzer hat alle Cookies abgelehnt',
      },
      {
        id: 'h-6-3',
        action: 'renewed',
        timestamp: new Date('2024-01-22T09:15:00'),
        version: '1.8',
        ipAddress: '10.1.0.200',
        userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 14_0) Safari/605.1.15',
        source: 'Cookie-Banner',
        notes: 'Nutzer hat Cookies nach Banner-Redesign erneut akzeptiert',
      },
    ],
  },
]

// =============================================================================
// HELPER FUNCTIONS
// =============================================================================

const typeLabels: Record<ConsentType, string> = {
  marketing: 'Marketing',
  analytics: 'Analyse',
  newsletter: 'Newsletter',
  terms: 'AGB',
  privacy: 'Datenschutz',
  cookies: 'Cookies',
}

const typeColors: Record<ConsentType, string> = {
  marketing: 'bg-purple-100 text-purple-700',
  analytics: 'bg-blue-100 text-blue-700',
  newsletter: 'bg-green-100 text-green-700',
  terms: 'bg-yellow-100 text-yellow-700',
  privacy: 'bg-orange-100 text-orange-700',
  cookies: 'bg-pink-100 text-pink-700',
}

const statusColors: Record<ConsentStatus, string> = {
  granted: 'bg-green-100 text-green-700',
  withdrawn: 'bg-red-100 text-red-700',
  pending: 'bg-yellow-100 text-yellow-700',
}

const statusLabels: Record<ConsentStatus, string> = {
  granted: 'Erteilt',
  withdrawn: 'Widerrufen',
  pending: 'Ausstehend',
}

const actionLabels: Record<HistoryAction, string> = {
  granted: 'Einwilligung erteilt',
  withdrawn: 'Einwilligung widerrufen',
  version_update: 'Neue Version akzeptiert',
  renewed: 'Einwilligung erneuert',
}

const actionIcons: Record<HistoryAction, React.ReactNode> = {
  granted: <CheckCircle className="w-5 h-5 text-green-500" />,
  withdrawn: <XCircle className="w-5 h-5 text-red-500" />,
  version_update: <FileCheck className="w-5 h-5 text-blue-500" />,
  renewed: <Shield className="w-5 h-5 text-purple-500" />,
}

function formatDateTime(date: Date): string {
  return date.toLocaleString('de-DE', {
    day: '2-digit',
    month: '2-digit',
    year: 'numeric',
    hour: '2-digit',
    minute: '2-digit',
    second: '2-digit',
  })
}

function formatDate(date: Date | null): string {
  if (!date) return '-'
  return date.toLocaleDateString('de-DE')
}

// =============================================================================
// DETAIL MODAL COMPONENT
// =============================================================================

interface ConsentDetailModalProps {
  record: ConsentRecord
  onClose: () => void
  onRevoke: (recordId: string) => void
}

function ConsentDetailModal({ record, onClose, onRevoke }: ConsentDetailModalProps) {
  const [showRevokeConfirm, setShowRevokeConfirm] = useState(false)

  return (
    <div className="fixed inset-0 bg-black/50 flex items-center justify-center z-50 p-4">
      <div className="bg-white rounded-2xl shadow-2xl w-full max-w-3xl max-h-[90vh] overflow-hidden flex flex-col">
        {/* Header */}
        <div className="px-6 py-4 border-b border-gray-200 flex items-center justify-between bg-gradient-to-r from-purple-50 to-indigo-50">
          <div>
            <h2 className="text-xl font-bold text-gray-900">Consent-Details</h2>
            <p className="text-sm text-gray-500">{record.email}</p>
          </div>
          <button
            onClick={onClose}
            className="p-2 hover:bg-white/50 rounded-lg transition-colors"
          >
            <X className="w-5 h-5 text-gray-500" />
          </button>
        </div>

        {/* Content */}
        <div className="flex-1 overflow-y-auto p-6 space-y-6">
          {/* User Info */}
          <div className="grid grid-cols-2 gap-4">
            <div className="bg-gray-50 rounded-xl p-4">
              <div className="flex items-center gap-3 mb-3">
                <User className="w-5 h-5 text-gray-400" />
                <span className="font-medium text-gray-700">Benutzerinformationen</span>
              </div>
              <div className="space-y-2 text-sm">
                <div className="flex justify-between">
                  <span className="text-gray-500">Name:</span>
                  <span className="font-medium">{record.firstName} {record.lastName}</span>
                </div>
                <div className="flex justify-between">
                  <span className="text-gray-500">E-Mail:</span>
                  <span className="font-medium">{record.email}</span>
                </div>
                <div className="flex justify-between">
                  <span className="text-gray-500">User-ID:</span>
                  <span className="font-mono text-xs bg-gray-200 px-2 py-0.5 rounded">{record.identifier}</span>
                </div>
              </div>
            </div>

            <div className="bg-gray-50 rounded-xl p-4">
              <div className="flex items-center gap-3 mb-3">
                <Shield className="w-5 h-5 text-gray-400" />
                <span className="font-medium text-gray-700">Consent-Status</span>
              </div>
              <div className="space-y-2 text-sm">
                <div className="flex justify-between items-center">
                  <span className="text-gray-500">Typ:</span>
                  <span className={`px-2 py-1 text-xs rounded-full ${typeColors[record.consentType]}`}>
                    {typeLabels[record.consentType]}
                  </span>
                </div>
                <div className="flex justify-between items-center">
                  <span className="text-gray-500">Status:</span>
                  <span className={`px-2 py-1 text-xs rounded-full ${statusColors[record.status]}`}>
                    {statusLabels[record.status]}
                  </span>
                </div>
                <div className="flex justify-between">
                  <span className="text-gray-500">Version:</span>
                  <span className="font-mono font-medium">v{record.currentVersion}</span>
                </div>
              </div>
            </div>
          </div>

          {/* Technical Details */}
          <div className="bg-gray-50 rounded-xl p-4">
            <div className="flex items-center gap-3 mb-3">
              <Monitor className="w-5 h-5 text-gray-400" />
              <span className="font-medium text-gray-700">Technische Details (letzter Consent)</span>
            </div>
            <div className="grid grid-cols-2 gap-4 text-sm">
              <div>
                <div className="text-gray-500 mb-1">IP-Adresse</div>
                <div className="font-mono text-xs bg-white px-3 py-2 rounded border">{record.ipAddress}</div>
              </div>
              <div>
                <div className="text-gray-500 mb-1">Quelle</div>
                <div className="bg-white px-3 py-2 rounded border">{record.source ?? '—'}</div>
              </div>
              <div className="col-span-2">
                <div className="text-gray-500 mb-1">User-Agent</div>
                <div className="font-mono text-xs bg-white px-3 py-2 rounded border break-all">{record.userAgent}</div>
              </div>
            </div>
          </div>

          {/* History Timeline */}
          <div>
            <div className="flex items-center gap-3 mb-4">
              <History className="w-5 h-5 text-purple-600" />
              <span className="font-semibold text-gray-900">Consent-Historie</span>
              <span className="text-xs bg-purple-100 text-purple-700 px-2 py-0.5 rounded-full">
                {record.history.length} Einträge
              </span>
            </div>

            <div className="relative">
              {/* Timeline line */}
              <div className="absolute left-[22px] top-0 bottom-0 w-0.5 bg-gray-200" />

              <div className="space-y-4">
                {record.history.map((entry, index) => (
                  <div key={entry.id} className="relative flex gap-4">
                    {/* Icon */}
                    <div className="relative z-10 bg-white p-1 rounded-full">
                      {actionIcons[entry.action]}
                    </div>

                    {/* Content */}
                    <div className="flex-1 bg-white rounded-xl border border-gray-200 p-4 shadow-sm">
                      <div className="flex items-start justify-between mb-2">
                        <div>
                          <div className="font-medium text-gray-900">{actionLabels[entry.action]}</div>
                          {entry.documentTitle && (
                            <div className="text-sm text-purple-600 font-medium">{entry.documentTitle}</div>
                          )}
                        </div>
                        <div className="text-right">
                          <div className="text-xs font-mono bg-gray-100 px-2 py-1 rounded">v{entry.version}</div>
                        </div>
                      </div>

                      <div className="flex items-center gap-4 text-xs text-gray-500 mb-2">
                        <div className="flex items-center gap-1">
                          <Calendar className="w-3 h-3" />
                          {formatDateTime(entry.timestamp)}
                        </div>
                        <div className="flex items-center gap-1">
                          <Globe className="w-3 h-3" />
                          {entry.ipAddress}
                        </div>
                      </div>

                      <div className="text-xs text-gray-500">
                        <span className="font-medium">Quelle:</span> {entry.source}
                      </div>

                      {entry.notes && (
                        <div className="mt-2 text-sm text-gray-600 bg-gray-50 rounded-lg px-3 py-2 border-l-2 border-purple-300">
                          {entry.notes}
                        </div>
                      )}

                      {/* Expandable User-Agent */}
                      <details className="mt-2">
                        <summary className="text-xs text-gray-400 cursor-pointer hover:text-gray-600">
                          User-Agent anzeigen
                        </summary>
                        <div className="mt-1 font-mono text-xs text-gray-500 bg-gray-50 p-2 rounded break-all">
                          {entry.userAgent}
                        </div>
                      </details>
                    </div>
                  </div>
                ))}
              </div>
            </div>
          </div>
        </div>

        {/* Footer Actions */}
        <div className="px-6 py-4 border-t border-gray-200 bg-gray-50 flex items-center justify-between">
          <div className="text-xs text-gray-500">
            Consent-ID: <span className="font-mono">{record.id}</span>
          </div>

          <div className="flex items-center gap-3">
            {record.status === 'granted' && !showRevokeConfirm && (
              <button
                onClick={() => setShowRevokeConfirm(true)}
                className="flex items-center gap-2 px-4 py-2 text-red-600 hover:bg-red-50 rounded-lg transition-colors"
              >
                <AlertTriangle className="w-4 h-4" />
                Widerrufen
              </button>
            )}

            {showRevokeConfirm && (
              <div className="flex items-center gap-2">
                <span className="text-sm text-red-600">Wirklich widerrufen?</span>
                <button
                  onClick={() => {
                    onRevoke(record.id)
                    onClose()
                  }}
                  className="px-3 py-1.5 bg-red-600 text-white text-sm rounded-lg hover:bg-red-700"
                >
                  Ja, widerrufen
                </button>
                <button
                  onClick={() => setShowRevokeConfirm(false)}
                  className="px-3 py-1.5 bg-gray-200 text-gray-700 text-sm rounded-lg hover:bg-gray-300"
                >
                  Abbrechen
                </button>
              </div>
            )}

            <button
              onClick={onClose}
              className="px-4 py-2 bg-purple-600 text-white rounded-lg hover:bg-purple-700 transition-colors"
            >
              Schließen
            </button>
          </div>
        </div>
      </div>
    </div>
  )
}

// =============================================================================
// TABLE ROW COMPONENT
// =============================================================================

interface ConsentRecordRowProps {
  record: ConsentRecord
  onShowDetails: (record: ConsentRecord) => void
}

function ConsentRecordRow({ record, onShowDetails }: ConsentRecordRowProps) {
  return (
    <tr className="hover:bg-gray-50">
      <td className="px-6 py-4">
        <div className="text-sm font-medium text-gray-900">{record.email}</div>
        <div className="text-xs text-gray-500">{record.identifier}</div>
      </td>
      <td className="px-6 py-4">
        <span className={`px-2 py-1 text-xs rounded-full ${typeColors[record.consentType]}`}>
          {typeLabels[record.consentType]}
        </span>
      </td>
      <td className="px-6 py-4">
        <span className={`px-2 py-1 text-xs rounded-full ${statusColors[record.status]}`}>
          {statusLabels[record.status]}
        </span>
      </td>
      <td className="px-6 py-4 text-sm text-gray-500">
        {formatDate(record.grantedAt)}
      </td>
      <td className="px-6 py-4 text-sm text-gray-500">
        {formatDate(record.withdrawnAt)}
      </td>
      <td className="px-6 py-4">
        <span className="font-mono text-xs bg-gray-100 px-2 py-0.5 rounded">v{record.currentVersion}</span>
      </td>
      <td className="px-6 py-4 text-sm text-gray-500">
        <div className="flex items-center gap-1">
          <History className="w-3 h-3" />
          {record.history.length}
        </div>
      </td>
      <td className="px-6 py-4">
        <button
          onClick={() => onShowDetails(record)}
          className="text-sm text-purple-600 hover:text-purple-700 font-medium"
        >
          Details
        </button>
      </td>
    </tr>
  )
}

// =============================================================================
// MAIN PAGE
// =============================================================================

export default function EinwilligungenPage() {
  const { state } = useSDK()
  const [records, setRecords] = useState<ConsentRecord[]>([])
  const [filter, setFilter] = useState<string>('all')
  const [searchQuery, setSearchQuery] = useState('')
  const [selectedRecord, setSelectedRecord] = useState<ConsentRecord | null>(null)
  const [isLoading, setIsLoading] = useState(true)

  React.useEffect(() => {
    const loadConsents = async () => {
      try {
        const response = await fetch('/api/sdk/v1/einwilligungen/consent?stats=true')
        if (response.ok) {
          const data = await response.json()
          // Backend returns stats; actual record list requires separate call
          const listResponse = await fetch('/api/sdk/v1/einwilligungen/consent')
          if (listResponse.ok) {
            const listData = await listResponse.json()
            // Map backend records to frontend ConsentRecord shape if any returned
            if (listData.consents && listData.consents.length > 0) {
              const mapped: ConsentRecord[] = listData.consents.map((c: {
                id: string
                user_id: string
                data_point_id: string
                granted: boolean
                granted_at: string
                revoked_at?: string
                consent_version?: string
                source?: string
                ip_address?: string
                user_agent?: string
                history?: ConsentHistoryEntry[]
              }) => ({
                id: c.id,
                identifier: c.user_id,
                email: c.user_id,
                consentType: (c.data_point_id as ConsentType) || 'privacy',
                status: (c.revoked_at ? 'withdrawn' : 'granted') as ConsentStatus,
                currentVersion: c.consent_version || '1.0',
                grantedAt: c.granted_at ? new Date(c.granted_at) : null,
                withdrawnAt: c.revoked_at ? new Date(c.revoked_at) : null,
                source: c.source ?? null,
                ipAddress: c.ip_address ?? '',
                userAgent: c.user_agent ?? '',
                history: c.history ?? [],
              }))
              setRecords(mapped)
            }
          }
        }
      } catch {
        // Backend not reachable, start with empty list
      } finally {
        setIsLoading(false)
      }
    }
    loadConsents()
  }, [])

  const filteredRecords = records.filter(record => {
    const matchesFilter = filter === 'all' || record.consentType === filter || record.status === filter
    const matchesSearch = searchQuery === '' ||
      record.email.toLowerCase().includes(searchQuery.toLowerCase()) ||
      record.identifier.toLowerCase().includes(searchQuery.toLowerCase())
    return matchesFilter && matchesSearch
  })

  const grantedCount = records.filter(r => r.status === 'granted').length
  const withdrawnCount = records.filter(r => r.status === 'withdrawn').length
  const versionUpdates = records.reduce((acc, r) => acc + r.history.filter(h => h.action === 'version_update').length, 0)

  const handleRevoke = async (recordId: string) => {
    try {
      const response = await fetch('/api/sdk/v1/einwilligungen/consent', {
        method: 'PUT',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({ consentId: recordId, action: 'revoke' }),
      })
      if (response.ok) {
        const now = new Date()
        setRecords(prev => prev.map(r => {
          if (r.id === recordId) {
            return {
              ...r,
              status: 'withdrawn' as ConsentStatus,
              withdrawnAt: now,
              history: [
                ...r.history,
                {
                  id: `h-${recordId}-${r.history.length + 1}`,
                  action: 'withdrawn' as HistoryAction,
                  timestamp: now,
                  version: r.currentVersion,
                  ipAddress: 'Admin-Portal',
                  userAgent: 'Admin Action',
                  source: 'Manueller Widerruf durch Admin',
                  notes: 'Widerruf über Admin-Portal durchgeführt',
                },
              ],
            }
          }
          return r
        }))
      }
    } catch {
      // Fallback: update local state even if API call fails
      const now = new Date()
      setRecords(prev => prev.map(r => {
        if (r.id === recordId) {
          return { ...r, status: 'withdrawn' as ConsentStatus, withdrawnAt: now }
        }
        return r
      }))
    }
  }

  const stepInfo = STEP_EXPLANATIONS['einwilligungen']

  return (
    <div className="space-y-6">
      {/* Step Header */}
      <StepHeader
        stepId="einwilligungen"
        title={stepInfo.title}
        description={stepInfo.description}
        explanation={stepInfo.explanation}
        tips={stepInfo.tips}
      >
        <button className="flex items-center gap-2 px-4 py-2 bg-purple-600 text-white rounded-lg hover:bg-purple-700 transition-colors">
          <svg className="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
            <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4" />
          </svg>
          Export
        </button>
      </StepHeader>

      {/* Navigation Tabs */}
      <EinwilligungenNavTabs />

      {/* Stats */}
      <div className="grid grid-cols-1 md:grid-cols-4 gap-4">
        <div className="bg-white rounded-xl border border-gray-200 p-6">
          <div className="text-sm text-gray-500">Gesamt</div>
          <div className="text-3xl font-bold text-gray-900">{records.length}</div>
        </div>
        <div className="bg-white rounded-xl border border-green-200 p-6">
          <div className="text-sm text-green-600">Aktive Einwilligungen</div>
          <div className="text-3xl font-bold text-green-600">{grantedCount}</div>
        </div>
        <div className="bg-white rounded-xl border border-red-200 p-6">
          <div className="text-sm text-red-600">Widerrufen</div>
          <div className="text-3xl font-bold text-red-600">{withdrawnCount}</div>
        </div>
        <div className="bg-white rounded-xl border border-blue-200 p-6">
          <div className="text-sm text-blue-600">Versions-Updates</div>
          <div className="text-3xl font-bold text-blue-600">{versionUpdates}</div>
        </div>
      </div>

      {/* Info Banner */}
      <div className="bg-gradient-to-r from-purple-50 to-indigo-50 rounded-xl border border-purple-200 p-4 flex items-start gap-3">
        <History className="w-5 h-5 text-purple-600 mt-0.5" />
        <div>
          <div className="font-medium text-purple-900">Consent-Historie aktiviert</div>
          <div className="text-sm text-purple-700">
            Alle Änderungen an Einwilligungen werden protokolliert, inkl. Zustimmungen zu neuen Versionen von AGB, DSI und anderen Dokumenten.
            Klicken Sie auf "Details" um die vollständige Historie eines Nutzers einzusehen.
          </div>
        </div>
      </div>

      {/* Search and Filter */}
      <div className="flex items-center gap-4">
        <div className="flex-1 relative">
          <svg className="w-5 h-5 text-gray-400 absolute left-3 top-1/2 -translate-y-1/2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
            <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" />
          </svg>
          <input
            type="text"
            value={searchQuery}
            onChange={(e) => setSearchQuery(e.target.value)}
            placeholder="E-Mail oder User-ID suchen..."
            className="w-full pl-10 pr-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-transparent"
          />
        </div>
        <div className="flex items-center gap-2 flex-wrap">
          {['all', 'granted', 'withdrawn', 'terms', 'privacy', 'cookies', 'marketing', 'analytics'].map(f => (
            <button
              key={f}
              onClick={() => setFilter(f)}
              className={`px-3 py-1 text-sm rounded-full transition-colors ${
                filter === f
                  ? 'bg-purple-600 text-white'
                  : 'bg-gray-100 text-gray-600 hover:bg-gray-200'
              }`}
            >
              {f === 'all' ? 'Alle' :
               f === 'granted' ? 'Erteilt' :
               f === 'withdrawn' ? 'Widerrufen' :
               f === 'terms' ? 'AGB' :
               f === 'privacy' ? 'DSI' :
               f === 'cookies' ? 'Cookies' :
               f === 'marketing' ? 'Marketing' : 'Analyse'}
            </button>
          ))}
        </div>
      </div>

      {/* Records Table */}
      <div className="bg-white rounded-xl border border-gray-200 overflow-hidden">
        <div className="overflow-x-auto">
          <table className="w-full">
            <thead className="bg-gray-50">
              <tr>
                <th className="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase">Nutzer</th>
                <th className="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase">Typ</th>
                <th className="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase">Status</th>
                <th className="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase">Erteilt am</th>
                <th className="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase">Widerrufen am</th>
                <th className="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase">Version</th>
                <th className="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase">Historie</th>
                <th className="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase">Aktion</th>
              </tr>
            </thead>
            <tbody className="divide-y divide-gray-100">
              {filteredRecords.map(record => (
                <ConsentRecordRow
                  key={record.id}
                  record={record}
                  onShowDetails={setSelectedRecord}
                />
              ))}
            </tbody>
          </table>
        </div>

        {filteredRecords.length === 0 && (
          <div className="p-12 text-center">
            <h3 className="text-lg font-semibold text-gray-900">Keine Einträge gefunden</h3>
            <p className="mt-2 text-gray-500">Passen Sie die Suche oder den Filter an.</p>
          </div>
        )}
      </div>

      {/* Pagination placeholder */}
      <div className="flex items-center justify-between">
        <p className="text-sm text-gray-500">
          Zeige {filteredRecords.length} von {records.length} Einträgen
        </p>
        <div className="flex items-center gap-2">
          <button className="px-3 py-1 text-sm text-gray-600 bg-gray-100 rounded-lg hover:bg-gray-200">
            Zurück
          </button>
          <button className="px-3 py-1 text-sm text-white bg-purple-600 rounded-lg">1</button>
          <button className="px-3 py-1 text-sm text-gray-600 bg-gray-100 rounded-lg hover:bg-gray-200">2</button>
          <button className="px-3 py-1 text-sm text-gray-600 bg-gray-100 rounded-lg hover:bg-gray-200">3</button>
          <button className="px-3 py-1 text-sm text-gray-600 bg-gray-100 rounded-lg hover:bg-gray-200">
            Weiter
          </button>
        </div>
      </div>

      {/* Detail Modal */}
      {selectedRecord && (
        <ConsentDetailModal
          record={selectedRecord}
          onClose={() => setSelectedRecord(null)}
          onRevoke={handleRevoke}
        />
      )}
    </div>
  )
}
