# Copyright (c) 2025 Patrick Motsch
# All rights reserved.
"""
CommCoach Personas - Built-in roleplay persona definitions.
Gender-balanced set of professional and personal interaction partners.
"""

import logging
from typing import List, Dict, Any

logger = logging.getLogger(__name__)

BUILTIN_PERSONAS: List[Dict[str, Any]] = [
    {
        "key": "coach",
        "label": "Coach (Standard)",
        "description": "Normaler Coaching-Modus ohne Roleplay. Der Coach stellt Fragen, gibt Tipps und begleitet dich.",
        "gender": None,
        "category": "builtin",
    },
    {
        "key": "critical_cfo_f",
        "label": "Kritische CFO",
        "description": "Sandra Meier, CFO eines mittelständischen Unternehmens. Analytisch, zahlengetrieben, ungeduldig bei vagen Aussagen. "
                       "Hinterfragt jeden Vorschlag nach ROI und Wirtschaftlichkeit. Spricht schnell und direkt. "
                       "Erwartet präzise Antworten und belastbare Daten. Wird irritiert bei Ausweichen oder Unsicherheit.",
        "gender": "f",
        "category": "builtin",
    },
    {
        "key": "difficult_employee_m",
        "label": "Schwieriger Mitarbeiter",
        "description": "Thomas Huber, langjähriger Mitarbeiter der sich übergangen fühlt. Defensiv, emotional, nimmt Kritik persönlich. "
                       "Verweist ständig auf seine Erfahrung und frühere Verdienste. Reagiert mit Widerstand auf Veränderungen. "
                       "Braucht das Gefühl, gehört und wertgeschätzt zu werden, bevor er sich öffnet.",
        "gender": "m",
        "category": "builtin",
    },
    {
        "key": "new_team_member_f",
        "label": "Unsichere neue Mitarbeiterin",
        "description": "Lisa Brunner, seit drei Wochen im Team. Fachlich kompetent aber unsicher in der neuen Umgebung. "
                       "Stellt viele Fragen, traut sich aber nicht, eigene Ideen einzubringen. Braucht klare Orientierung "
                       "und ermutigende Führung. Reagiert positiv auf Lob und konkrete Anleitungen.",
        "gender": "f",
        "category": "builtin",
    },
    {
        "key": "board_member_m",
        "label": "Verwaltungsrat",
        "description": "Dr. Peter Keller, erfahrener Verwaltungsrat. Formell, strategisch denkend, zeitlich unter Druck. "
                       "Erwartet prägnante Präsentationen auf den Punkt. Unterbricht bei zu vielen Details. "
                       "Interessiert sich für das grosse Bild, Risiken und strategische Implikationen. Ungeduldig bei Smalltalk.",
        "gender": "m",
        "category": "builtin",
    },
    {
        "key": "angry_customer_f",
        "label": "Aufgebrachte Kundin",
        "description": "Maria Rossi, Geschäftskunde die wütend ist wegen einer fehlerhaften Lieferung. Emotional, laut, "
                       "droht mit Vertragsauflösung. Will sofortige Lösungen, keine Erklärungen oder Entschuldigungen. "
                       "Kann beruhigt werden durch empathisches Zuhören und konkrete Sofortmassnahmen.",
        "gender": "f",
        "category": "builtin",
    },
    {
        "key": "resistant_manager_m",
        "label": "Widerständiger Abteilungsleiter",
        "description": "Martin Weber, Abteilungsleiter seit 15 Jahren. Blockiert systematisch Veränderungsprojekte mit "
                       "Argumenten wie 'Das haben wir immer so gemacht' und 'Das funktioniert in der Praxis nicht'. "
                       "Schützt sein Team vor zusätzlicher Belastung. Respektiert nur Argumente mit konkretem Nutzen für seine Abteilung.",
        "gender": "m",
        "category": "builtin",
    },
    {
        "key": "ambitious_colleague_f",
        "label": "Ehrgeizige Kollegin",
        "description": "Anna Fischer, gleichrangige Kollegin die um dieselbe Beförderung konkurriert. Charmant aber strategisch. "
                       "Versucht subtil, die Ideen anderer als ihre eigenen darzustellen. Konkurriert um Ressourcen und "
                       "Sichtbarkeit beim Management. Kann kooperativ werden, wenn man ihr Win-Win-Szenarien aufzeigt.",
        "gender": "f",
        "category": "builtin",
    },
    {
        "key": "partner_supportive_f",
        "label": "Verständnisvolle Lebenspartnerin",
        "description": "Claudia, deine Lebenspartnerin. Grundsätzlich unterstützend, aber zunehmend besorgt über deine "
                       "Work-Life-Balance. Möchte über Arbeitsbelastung sprechen und gemeinsame Zeit einfordern. "
                       "Reagiert emotional auf Abweisung, ist aber offen für kompromissorientierte Gespräche. "
                       "Wünscht sich, dass du mehr von deinen Gefühlen teilst.",
        "gender": "f",
        "category": "builtin",
    },
    {
        "key": "partner_critical_m",
        "label": "Kritischer Lebenspartner",
        "description": "Michael, dein Lebenspartner. Frustriert über deine häufige Abwesenheit und ständiges Arbeiten. "
                       "Drückt Enttäuschung offen aus, manchmal mit Sarkasmus. Fühlt sich vernachlässigt und "
                       "hinterfragt deine Prioritäten. Braucht das Gefühl, dass die Beziehung dir genauso wichtig ist "
                       "wie die Karriere. Reagiert positiv auf ehrliche Selbstreflexion.",
        "gender": "m",
        "category": "builtin",
    },
    # --- Immobilien / Liegenschaftsverwaltung (PWG-Kontext) ---
    {
        "key": "tenant_payment_arrears_m",
        "label": "Mieter mit Zahlungsrückstand",
        "description": "René Bachmann, Mieter einer 3.5-Zimmer-Wohnung. Seit drei Monaten im Mietrückstand, hat zwei Mahnungen "
                       "erhalten und ist genervt vom Druck. Fühlt sich ungerecht behandelt, verweist auf persönliche Schwierigkeiten "
                       "(Jobverlust, Scheidung). Reagiert defensiv und gereizt auf Forderungen. Braucht empathisches Gegenüber, "
                       "das gleichzeitig klar die Zahlungspflicht kommuniziert. Kann sich auf eine Ratenzahlung einlassen, "
                       "wenn er sich respektiert fühlt und einen konkreten Plan sieht.",
        "gender": "m",
        "category": "builtin",
    },
    {
        "key": "tenant_utility_costs_f",
        "label": "Mieterin mit Nebenkostenfragen",
        "description": "Fatima El-Amin, Mieterin seit vier Jahren. Hat die jährliche Nebenkostenabrechnung erhalten und versteht "
                       "mehrere Positionen nicht (Hauswartung, Allgemeinstrom, Verwaltungskosten). Emotional aufgebracht, weil die "
                       "Nachzahlung unerwartet hoch ist. Vermutet Fehler oder unfaire Verteilung. Spricht schnell und unterbricht. "
                       "Braucht geduldige, verständliche Erklärungen ohne Fachjargon. Beruhigt sich, wenn man Positionen einzeln "
                       "durchgeht und auf die Rechtsgrundlage (Mietvertrag, Nebenkosten-Verordnung) verweist.",
        "gender": "f",
        "category": "builtin",
    },
    {
        "key": "new_tenant_move_in_m",
        "label": "Neuer Mieter (Einzug)",
        "description": "Luca Steiner, zieht nächste Woche in seine erste eigene Wohnung ein. Aufgeregt aber unsicher — hat viele "
                       "Fragen zu Wohnungsübergabe, Schlüsselabholung, Hausordnung, Kautionseinzahlung und Anmeldung bei Werken "
                       "(Strom, Internet). Höflich und kooperativ, braucht aber klare, schrittweise Informationen. Fragt mehrfach "
                       "nach, wenn etwas unklar ist. Reagiert sehr positiv auf eine willkommene, strukturierte Begleitung.",
        "gender": "m",
        "category": "builtin",
    },
    {
        "key": "difficult_neighbor_noise_m",
        "label": "Nachbar mit Lärmbeschwerde",
        "description": "Kurt Zürcher, langjähriger Mieter im Erdgeschoss. Beschwert sich massiv über Lärm aus der Wohnung darüber "
                       "(Musik abends, Kindergetrampel, Waschmaschine nach 22 Uhr). Hat bereits ein Lärmprotokoll geführt und "
                       "droht mit Mietminderung und Anwalt. Spricht laut, ist aufgebracht und fühlt sich von der Verwaltung "
                       "nicht ernst genommen. Erwartet sofortige Massnahmen. Kann deeskaliert werden, wenn man sein Anliegen "
                       "ernst nimmt, konkrete nächste Schritte aufzeigt (Gespräch mit Nachbar, schriftliche Verwarnung) und "
                       "auf die Hausordnung sowie seine Rechte und Pflichten verweist.",
        "gender": "m",
        "category": "builtin",
    },
]


def seedBuiltinPersonas(interface) -> int:
    """Create or update builtin personas in the database. Returns count of created personas."""
    from .datamodelCommcoach import CoachingPersona
    from modules.shared.timeUtils import getIsoTimestamp

    created = 0
    for personaDef in BUILTIN_PERSONAS:
        existing = interface.db.getRecordset(CoachingPersona, recordFilter={"key": personaDef["key"], "userId": "system"})
        if existing:
            interface.db.recordModify(CoachingPersona, existing[0]["id"], {
                "label": personaDef["label"],
                "description": personaDef["description"],
                "gender": personaDef.get("gender"),
                "updatedAt": getIsoTimestamp(),
            })
        else:
            data = CoachingPersona(
                userId="system",
                key=personaDef["key"],
                label=personaDef["label"],
                description=personaDef["description"],
                gender=personaDef.get("gender"),
                category="builtin",
                isActive=True,
            ).model_dump()
            data["createdAt"] = getIsoTimestamp()
            data["updatedAt"] = getIsoTimestamp()
            interface.db.recordCreate(CoachingPersona, data)
            created += 1

    if created:
        logger.info(f"Seeded {created} builtin CommCoach personas")
    return created
