import 'package:flutter/material.dart'; import '../../../../core/theme/app_theme.dart'; class PatternExplanations { static const Map> dictionary = { 'ASCENDING_TRIANGLE': { 'title': 'Steigendes Dreieck (Ascending Triangle)', 'bias': 'BULLISH', 'description': 'Ein bullisches Fortsetzungsmuster, das durch eine horizontale Widerstandslinie oben und eine steigende Unterstützungslinie unten gekennzeichnet ist.', 'significance': 'Käufer werden bei jedem Rücksetzer aggressiver (höhere Tiefs). Ein Ausbruch über die obere Widerstandslinie signalisiert eine starke Fortsetzung des Aufwärtstrends.', 'action': 'Kauf-Order / Breakout-Trade beim Ausbruch über den horizontalen Widerstand mit Stop-Loss knapp unter der steigenden Trendlinie.', }, 'DESCENDING_TRIANGLE': { 'title': 'Fallendes Dreieck (Descending Triangle)', 'bias': 'BEARISH', 'description': 'Ein bärisches Fortsetzungsmuster mit einer horizontalen Unterstützungslinie unten und fallenden Hochs oben.', 'significance': 'Verkäufer drücken den Kurs bei jeder Erholung schneller nach unten. Ein Bruch der unteren Unterstützung führt meist zu dynamischen Abverkäufen.', 'action': 'Short-Trade oder Verkauf bei Durchbruch der unteren Unterstützungslinie.', }, 'HEAD_AND_SHOULDERS': { 'title': 'Kopf-Schulter-Formation (Head & Shoulders)', 'bias': 'BEARISH', 'description': 'Klassisches Umkehrmuster bestehend aus drei Höchstständen: der mittleren höchsten Spitze (Kopf) und zwei kleineren Höchstständen links und rechts (Schultern).', 'significance': 'Ein nachhaltiger Bruch der Nackenlinie (Neckline) markiert das Ende eines Aufwärtstrends und den Beginn einer Bärenphase.', 'action': 'Verkauf/Short-Position beim Bruch der Nackenlinie mit Kursziel entsprechend der Distanz zwischen Kopf und Nackenlinie.', }, 'INVERSE_HEAD_AND_SHOULDERS': { 'title': 'Umgekehrte Kopf-Schulter-Formation', 'bias': 'BULLISH', 'description': 'Bullisches Bodenbildungsmuster nach einem Abwärtstrend mit drei Tiefspunkten.', 'significance': 'Signalisiert das Ende des Abwärtstrends und den Beginn eines neuen Bullenmarktes.', 'action': 'Kauf bei Ausbruch über die obere Nackenlinie.', }, 'BULL_FLAG': { 'title': 'Bullische Flagge (Bull Flag)', 'bias': 'BULLISH', 'description': 'Kurze Konsolidierung gegen den übergeordneten starken Aufwärtstrend (Fahnenstange).', 'significance': 'Zeigt eine temporäre Gewinnmitnahme vor der nächsten Welle nach oben.', 'action': 'Kauf beim Ausbruch aus der oberen Begrenzung des Flaggenkanals.', }, 'BEAR_FLAG': { 'title': 'Bärische Flagge (Bear Flag)', 'bias': 'BEARISH', 'description': 'Kurze Aufwärtskonsolidierung in einem steilen Abwärtstrend.', 'significance': 'Signalisiert eine Fortsetzung des steilen Abverkaufs.', 'action': 'Short-Position bei Durchbrechen der unteren Flaggenkante.', }, 'DOUBLE_BOTTOM': { 'title': 'Doppelboden (W-Formation)', 'bias': 'BULLISH', 'description': 'Zwei aufeinanderfolgende Tiefpunkte auf etwa gleichem Kursniveau.', 'significance': 'Starke Unterstützung auf dem Tiefststand wurde zweimal erfolgreich verteidigt. Ausbruch über das Zwischenhoch bestätigt W-Boden.', 'action': 'Kauf bei Überschreiten des W-Zwischenhochs.', }, 'DOUBLE_TOP': { 'title': 'Doppeltopp (M-Formation)', 'bias': 'BEARISH', 'description': 'Zwei markante Höchststände auf ähnlicher Höhe, die nicht durchbrochen werden konnten.', 'significance': 'Widerstandszone ist zu stark für die Bullen. Bruch des Zwischen-Tiefs leitet Trendwende ein.', 'action': 'Verkauf/Short bei Bruch des Zwischentiefs.', }, 'CHANNEL': { 'title': 'Trendkanal (Trading Channel)', 'bias': 'NEUTRAL', 'description': 'Parallele obere und untere Trendlinien, zwischen denen der Kurs Oszilliert.', 'significance': 'Erlaubt Swing-Trading zwischen den Kanallinien oder Breakout-Trading beim Ausbruch.', 'action': 'Kauf an der Unterkante, Verkauf an der Oberkante oder Breakout-Trading.', }, 'SUPPORT_RESISTANCE': { 'title': 'Unterstützungs- & Widerstandslinien', 'bias': 'NEUTRAL', 'description': 'Preisniveaus, an denen historisch gehäuft Kauf- oder Verkaufsinteresse auftrat.', 'significance': 'Wichtige Marken für Stop-Loss Platzierungen und Kursziele.', 'action': 'Trading an Key-Levels mit engem Risikomanagement.', }, }; static void showPatternDetails(BuildContext context, String rawPatternType) { final key = dictionary.keys.firstWhere( (k) => rawPatternType.toUpperCase().contains(k) || k.contains(rawPatternType.toUpperCase()), orElse: () => '', ); final info = key.isNotEmpty ? dictionary[key]! : { 'title': rawPatternType, 'bias': 'NEUTRAL', 'description': 'Ein vom FinlyticAnalyzer erkanntes technisches Chart-Muster ($rawPatternType).', 'significance': 'Trendlinien und Schlüssel-Zonen zur Bestimmung von Ein- und Ausstiegssignalen.', 'action': 'Nutzen Sie Stopp-Orders und beachten Sie den übergeordneten Markt-Trend.', }; final isBullish = info['bias'] == 'BULLISH'; final isBearish = info['bias'] == 'BEARISH'; final biasColor = isBullish ? AppTheme.primaryEmerald : (isBearish ? AppTheme.accentRed : AppTheme.accentCyan); showDialog( context: context, builder: (modalContext) => AlertDialog( backgroundColor: AppTheme.cardSurface, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(16), side: BorderSide(color: AppTheme.glassBorder), ), title: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Expanded( child: Text( info['title']!, style: const TextStyle(color: Colors.white, fontSize: 16, fontWeight: FontWeight.bold), ), ), Container( padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 3), decoration: BoxDecoration( color: biasColor.withValues(alpha: 0.2), borderRadius: BorderRadius.circular(6), border: Border.all(color: biasColor), ), child: Text( info['bias']!, style: TextStyle(color: biasColor, fontWeight: FontWeight.bold, fontSize: 11), ), ), ], ), ], ), content: SingleChildScrollView( child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ const Text('Formationsbeschreibung:', style: TextStyle(fontWeight: FontWeight.bold, color: Colors.white, fontSize: 13)), const SizedBox(height: 4), Text(info['description']!, style: TextStyle(color: AppTheme.textSecondary, fontSize: 13, height: 1.4)), const SizedBox(height: 14), const Text('Markt-Bedeutung & Psychologie:', style: TextStyle(fontWeight: FontWeight.bold, color: Colors.white, fontSize: 13)), const SizedBox(height: 4), Text(info['significance']!, style: const TextStyle(color: Colors.white70, fontSize: 13, height: 1.4)), const SizedBox(height: 14), const Text('Empfohlene Trading-Handlung:', style: TextStyle(fontWeight: FontWeight.bold, color: Colors.white, fontSize: 13)), const SizedBox(height: 4), Container( padding: const EdgeInsets.all(10), decoration: BoxDecoration( color: AppTheme.glassSurface, borderRadius: BorderRadius.circular(8), border: Border.all(color: AppTheme.glassBorder), ), child: Text(info['action']!, style: TextStyle(color: AppTheme.accentCyan, fontSize: 12, fontWeight: FontWeight.w600, height: 1.4)), ), ], ), ), actions: [ TextButton( onPressed: () => Navigator.pop(modalContext), child: const Text('Schließen', style: TextStyle(color: Colors.white)), ), ], ), ); } }