﻿"""Stub AI adapter for HAD Digital MVP.

Echoes messages back with context-aware formatting.
Used for offline demo and development.
"""

from adapters.base import BaseAdapter


class StubAdapter(BaseAdapter):
    """Stub adapter that echoes messages with helpful context-aware responses."""

    def chat(self, message: str, context: dict = None) -> dict:
        """Generate a stub response based on the message content."""
        context = context or {}
        patient_id = context.get("patient_id")
        user_role = context.get("user_role", "unknown")
        symptoms = context.get("symptoms", [])
        history = context.get("history", [])

        # Simple keyword-based response logic for demo
        message_lower = message.lower()

        if any(word in message_lower for word in ["nausee", "nausea", "vomissement", "vomiting"]):
            response = (
                "D'apres les symptomes decrits, il s'agit probablement d'effets secondaires "
                "gastro-intestinaux du traitement. Je recommande:\n\n"
                "1. Antiemetiques selon le protocole prescrit\n"
                "2. Hydratation adequate (minimum 1.5L/jour)\n"
                "3. Repas fractionnes (petites portions frequentes)\n"
                "4. Surveillance de la deshydratation\n\n"
                "Si les symptomes persistent plus de 48h ou s'aggravent, "
                "contactez l'equipe soignante."
            )
            actions = [
                {"type": "check_symptom", "symptom": "nausea", "label": "Evaluer la nausee"},
                {"type": "check_symptom", "symptom": "vomiting", "label": "Evaluer les vomissements"},
            ]
        elif any(word in message_lower for word in ["fievre", "fever", "temperature", "fieber"]):
            response = (
                "La fievre pendant une chimiotherapie peut etre un signe de neutropenie febrile, "
                "ce qui est une URGENCE MEDICALE.\n\n"
                "Actions immediates:\n"
                "1. Prendre la temperature\n"
                "2. Si >= 38.3C: contacter immediatement le 15 ou les urgences\n"
                "3. Si 38.0-38.3C: contacter l'equipe soignante dans l'heure\n\n"
                "Ne prenez pas d'antibiotiques sans avis medical."
            )
            actions = [
                {"type": "check_symptom", "symptom": "fever", "label": "Evaluer la fievre"},
                {"type": "emergency", "label": "Contacter les urgences"},
            ]
        elif any(word in message_lower for word in ["fatigue", "fatigue", "fatigue"]):
            response = (
                "La fatigue est un effet secondaire tres frequent de la chimiotherapie. "
                "Voici quelques recommandations:\n\n"
                "1. Maintenir une activite physique moderee (marche quotidienne)\n"
                "2. Planifier des periodes de repos\n"
                "3. Maintenir une alimentation equilibree\n"
                "4. Dormir 7-8 heures par nuit\n\n"
                "Si la fatigue empeche les activites quotidiennes, "
                "une evaluation medicale est recommandee."
            )
            actions = [
                {"type": "check_symptom", "symptom": "fatigue", "label": "Evaluer la fatigue"},
            ]
        elif any(word in message_lower for word in ["douleur", "pain", "douleur"]):
            response = (
                "La douleur pendant le traitement peut avoir plusieurs causes. "
                "Il est important de:\n\n"
                "1. Decrire l'intensite (echelle 0-10)\n"
                "2. Localiser la douleur\n"
                "3. Noter les facteurs aggravants/soulageants\n\n"
                "Les antalgiques doivent etre pris selon la prescription. "
                "Si la douleur est mal controlee, contactez l'equipe soignante."
            )
            actions = [
                {"type": "assess_pain", "label": "Evaluer la douleur"},
            ]
        elif any(word in message_lower for word in ["medicament", "medication", "drug", "traitement"]):
            response = (
                "Pour toute question sur vos medicaments:\n\n"
                "1. Respectez les horaires de prise\n"
                "2. Ne modifiez jamais la dose sans avis medical\n"
                "3. Signalez tout effet indesirable\n"
                "4. Gardez une liste de vos medicaments a jour\n\n"
                "Votre pharmacien peut aussi vous conseiller sur les interactions."
            )
            actions = [
                {"type": "view_medications", "label": "Voir mes medicaments"},
            ]
        else:
            response = (
                f"Je suis l'assistant virtuel HAD Digital. "
                f"Je peux vous aider avec:\n\n"
                f"- La gestion des effets secondaires\n"
                f"- Les questions sur votre traitement\n"
                f"- Les symptomes a surveiller\n"
                f"- Les contacts d'urgence\n\n"
                f"Posez-moi votre question ou choisissez un sujet."
            )
            actions = [
                {"type": "check_symptom", "symptom": "nausea", "label": "Nausee"},
                {"type": "check_symptom", "symptom": "fatigue", "label": "Fatigue"},
                {"type": "check_symptom", "symptom": "fever", "label": "Fievre"},
                {"type": "view_guidance", "label": "Guidance patient"},
            ]

        # Add patient context if available
        if patient_id:
            response = f"[Patient #{patient_id}] {response}"

        return {
            "response": response,
            "sources": ["HAD Digital - Guide patient"],
            "confidence": 0.8,
            "actions": actions,
            "adapter": "stub",
        }

    def get_name(self) -> str:
        return "stub"

    def is_available(self) -> bool:
        return True
