"""HTML-E-Mail-Vorlagen für Magic Links, Einladungen und Benachrichtigungen.""" def magic_link_login_email(username: str, link: str) -> tuple[str, str]: """Erzeugt Login-E-Mail mit Magic Link. Returns: (subject, html_body) """ subject = f"AegisSight Monitor - Anmeldung" html = f"""

AegisSight Monitor

Hallo {username},

Klicken Sie auf den Button, um sich anzumelden:

Jetzt anmelden

Oder kopieren Sie diesen Link in Ihren Browser:

{link}

Dieser Link ist 10 Minuten gültig. Falls Sie diese Anmeldung nicht angefordert haben, ignorieren Sie diese E-Mail.

""" return subject, html def incident_notification_email( username: str, incident_title: str, notifications: list[dict], dashboard_url: str, incident_type: str = "adhoc", ) -> tuple[str, str]: """Erzeugt Benachrichtigungs-E-Mail für Lagen-Updates. Args: username: Empfaenger-Name incident_title: Titel der Lage/Recherche notifications: Liste von {"text": ..., "icon": ...} Dicts dashboard_url: Link zum Dashboard incident_type: "adhoc" oder "research" Returns: (subject, html_body) """ is_research = incident_type == "research" type_label = "Recherche" if is_research else "Lagebild" type_label_lower = "Recherche" if is_research else "Lage" subject = f"AegisSight - {incident_title}" icon_map = { "success": "✓", "warning": "⚠", "error": "✗", "info": "ⓘ", } color_map = { "success": "#22c55e", "warning": "#f0b429", "error": "#ef4444", "info": "#94a3b8", } items_html = "" for n in notifications: icon = icon_map.get(n.get("icon", "info"), "ⓘ") color = color_map.get(n.get("icon", "info"), "#94a3b8") text = n.get("text", "") items_html += f"""
{icon} {text}
""" html = f"""

AegisSight Monitor

{type_label} - Benachrichtigung

Hallo {username},

es gibt Neuigkeiten zur {type_label_lower} {incident_title}:

{items_html}
Im Dashboard ansehen

Diese Benachrichtigung kann in den Einstellungen im Dashboard deaktiviert werden.

""" return subject, html