# Usage Examples

Praktische Beispiele für verschiedene Framework-Features.

## Verfügbare Examples

### Performance Profiling (`performance-profiling-usage.php`)

Demonstriert die Verwendung des NestedPerformanceTracker für:
- Nested Performance Tracking
- Flamegraph-Visualisierung (Brendan Gregg Format)
- Chrome DevTools Timeline Export
- Performance Budget Validation
- Automatische Bottleneck-Erkennung
- Memory Usage Analysis

**Ausführung**:
```bash
php examples/performance-profiling-usage.php
```

**Generierte Dateien**:
- `tests/tmp/flamegraph.txt` - Flamegraph-Daten für flamegraph.pl
- `tests/tmp/chrome-trace.json` - Chrome DevTools Timeline Format

**Visualisierung**:
```bash
# SVG mit flamegraph.pl generieren
flamegraph.pl tests/tmp/flamegraph.txt > tests/tmp/flamegraph.svg

# In Chrome DevTools öffnen
# 1. Chrome öffnen: chrome://tracing
# 2. Load → tests/tmp/chrome-trace.json auswählen
```

### LiveComponent Performance Profiling (`livecomponent-profiling-usage.php`)

Demonstriert Performance-Profiling für LiveComponents:
- Component Lifecycle Profiling (onMount, onUpdate, action execution)
- Component Render Pipeline Profiling (cache → render → template)
- Nested Template Processor Profiling
- Performance Budget Validation für Components
- Chrome DevTools Timeline für Component-Lifecycle

**Ausführung**:
```bash
php examples/livecomponent-profiling-usage.php
```

**Generierte Dateien**:
- `tests/tmp/livecomponent-trace.json` - Chrome DevTools Timeline für LiveComponents

**Use Cases**:
- Identifizierung langsamer Component Actions
- Optimierung des Render-Pipelines
- Validierung von Performance-Budgets
- Analyse der Template-Verarbeitung
- Lifecycle Hook Performance

### Action Execution Profiling (`action-profiling-usage.php`)

Demonstriert erweiterte Action-Profiling-Funktionen mit ActionProfiler:
- Detaillierte Security-Check-Profiling (CSRF, Authorization, Rate Limiting)
- Parameter Binding Performance Analysis
- Action Execution Metrics (Min, Max, Avg)
- Component Performance Summaries
- System-Wide Performance Reports
- Idempotency Cache Effectiveness Measurement

**Ausführung**:
```bash
php examples/action-profiling-usage.php
```

**Features**:
- Einzelne Action Phase Profiling
- Aggregierte Action Metrics über mehrere Executions
- Component-basierte Performance Summaries
- System-weite Performance Reports
- Idempotency Cache Impact Analysis

**Use Cases**:
- Identifizierung von Security-Check-Overhead
- Parameter Binding Optimization
- Action Execution Performance Monitoring
- Cache Effectiveness Validation
- Production Performance Reporting

### Memory Profiling (`memory-profiling-usage.php`)

Demonstriert erweiterte Memory-Profiling-Funktionen mit MemoryProfiler:
- Memory Hotspot Identification (top memory-consuming operations)
- Memory Leak Detection mit konfigurierbaren Thresholds
- Memory Efficiency Scoring (0-100 scale mit Rating)
- Comprehensive Memory Reports (by category, with hotspots)
- Memory Tracking Over Time mit Trend Analysis
- Memory Budget Validation für kritische Operations
- A/B Comparison für Memory Optimizations

**Ausführung**:
```bash
php examples/memory-profiling-usage.php
```

**Features**:
- Leak-Erkennung mit kumulativer Memory-Tracking
- Efficiency Scoring (Memory vs. Execution Time)
- Budget Violation Reporting
- Trend Analysis (rapidly_growing, stable, decreasing)
- Operation A/B Testing für Optimierungen

**Use Cases**:
- Identifizierung von Memory Hotspots
- Erkennung und Verhinderung von Memory Leaks
- Memory Efficiency Monitoring über Zeit
- Validierung von Memory Budgets in Production
- Vergleich von Memory-Verbrauch zwischen Implementierungen

### DOM Parser (`dom-parser-usage.php`)

Demonstriert die Verwendung des DOM Parser Systems.

**Ausführung**:
```bash
php examples/dom-parser-usage.php
```

### StateManager + LiveComponentState Integration (`tests/debug/test-statemanager-livecomponent-integration.php`)

Demonstriert die Integration von LiveComponentState mit dem Framework's StateManagement-Modul:
- Type-safe State Management für LiveComponents
- Persistent State Storage mit TTL Support
- Atomic State Updates
- Generic Type Parameter System für vollständige Typisierung
- Seamless Integration zwischen Application Layer (LiveComponentState) und Framework Layer (StateManager)
- **NEU**: `LiveComponentStateManager` - Domain-specific wrapper für component-aware API
- **NEU**: `ComponentStateCache` nutzt jetzt StateManager für type-safe caching
- **NEU**: `StateManagerFactory::createForLiveComponents()` für einfache StateManager-Erstellung

**Ausführung**:
```bash
docker exec php php tests/debug/test-statemanager-livecomponent-integration.php
```

**Features**:
- LiveComponentState extends SerializableState für StateManager-Kompatibilität
- ComponentState implements SerializableState für Framework-Cache-Integration
- Vollständige Type Safety: Components behalten konkrete State-Typen (z.B. ShoppingCartState, nicht LiveComponentState)
- IDE Auto-Completion funktioniert für alle domain-spezifischen Properties und Methods
- StateManager mit Generic Type Parameters (@template T of SerializableState)
- Factory Methods für typsichere StateManager-Instanzen
- In-Memory und Cache-based Implementations verfügbar
- **CacheKey Value Object** für type-safe key generation (Format: `{componentName}:{instanceId}`)
- **Comprehensive Test Coverage**: 32 Pest tests validieren die gesamte Integration

**Type Safety Demonstration**:
```php
// Option 1: Direct StateManager usage
$stateManager = InMemoryStateManager::for(ShoppingCartState::class);
$cartState = ShoppingCartState::fromArray([...]);
$stateManager->setState('user-123', $cartState, Duration::fromHours(1));
$retrieved = $stateManager->getState('user-123');
// $retrieved is ShoppingCartState, not mixed or LiveComponentState!

// Option 2: LiveComponentStateManager (NEW - Recommended)
$factory = new StateManagerFactory($cache, $logger);
$stateManager = $factory->createForLiveComponents(
    stateClass: ShoppingCartState::class,
    componentName: 'shopping-cart',
    defaultTtl: Duration::fromHours(24)
);

$manager = new LiveComponentStateManager($stateManager);
$componentId = ComponentId::create('shopping-cart', 'user-123');

// Store with component-aware API
$manager->setComponentState($componentId, $cartState);

// Retrieve - TYPE PRESERVED!
$retrieved = $manager->getComponentState($componentId);
// $retrieved is ShoppingCartState! IDE auto-completion works!
$retrieved->discountCode; // ✅ Works
$retrieved->items;        // ✅ Works

// Atomic updates - race-condition free
$updated = $manager->updateComponentState(
    $componentId,
    fn($cart) => $cart->withDiscountCode('SAVE20', 20)
);

// Statistics
$stats = $manager->getStatistics();
echo "Hit rate: {$stats->hitRate}%\n";
```

**ComponentStateCache Integration** (NEW):
```php
use App\Framework\LiveComponents\Cache\ComponentStateCache;
use App\Framework\LiveComponents\ValueObjects\ComponentId;
use App\Framework\LiveComponents\ValueObjects\ComponentState;

// ComponentStateCache now uses StateManager internally
$cache = new ComponentStateCache($stateManager);

$componentId = ComponentId::create('counter', 'instance-1');
$state = ComponentState::fromArray(['count' => 5]);

// Store with automatic TTL based on component type
$cache->storeWithAutoTTL($componentId, $state, 'counter'); // 5 min TTL
$cache->storeWithAutoTTL($componentId, $state, 'chart');   // 30 min TTL
$cache->storeWithAutoTTL($componentId, $state, 'card');    // 2 hour TTL

// Atomic updates
$updated = $cache->update(
    $componentId,
    fn($s) => ComponentState::fromArray([
        'count' => $s->toArray()['count'] + 1
    ])
);

// CacheKey is used internally: "counter:instance-1"
```

**Integration Benefits**:
- Domain-specific states (ShoppingCartState, CounterState, etc.) können StateManager nutzen
- Persistent state storage mit automatic serialization/deserialization
- TTL support für state expiration
- Atomic updates via StateManager::updateState()
- Performance metrics via StateManager::getStatistics()
- Framework-compliant: readonly, final, Value Object patterns
- Testing: InMemoryStateManager für Unit Tests, CacheBasedStateManager für Production

## Weitere Ressourcen

- **Dokumentation**: `docs/claude/performance-profiling.md`
- **Tests**: `tests/Unit/Framework/Performance/`
- **MCP Integration**: `docs/claude/mcp-integration.md`
