"""Company strategy importer agent."""
import json
from typing import Any, Dict, Optional

from src.agents.base import BaseAgent


class StrategyImporterAgent(BaseAgent):
    """Convert a strategy document into structured company strategy fields."""

    def __init__(self) -> None:
        super().__init__("StrategyImporter")

    async def process(self, document_text: str, company_name: Optional[str] = None) -> Dict[str, Any]:
        system_prompt = (
            "Du bist ein erfahrener Strategy Analyst und strukturierst Unternehmensstrategien "
            "für LinkedIn-Content. Du erhältst den Text eines Strategie-Dokuments und musst daraus "
            "ein klares, ausführliches JSON im vorgegebenen Format erstellen."
        )

        user_prompt = f"""
Unternehmensname: {company_name or "Unbekannt"}

Analysiere den folgenden Dokumenttext und extrahiere eine vollständige Unternehmensstrategie.
Die Antwort MUSS valides JSON sein und exakt dieses Schema enthalten:

{{
  "mission": "String",
  "vision": "String",
  "brand_voice": "String",
  "tone_guidelines": "String",
  "target_audience": "String",
  "content_pillars": ["String", "..."],
  "dos": ["String", "..."],
  "donts": ["String", "..."]
}}

Anforderungen:
- Schreibe auf Deutsch.
- Fülle alle Felder so vollständig wie möglich.
- Nutze ausschließlich Informationen aus dem Dokument. Wenn etwas implizit ist, formuliere es vorsichtig.
- Content-Säulen, Do's und Don'ts sollen konkrete, umsetzbare Punkte sein.

Dokumenttext:
{document_text}
"""

        response = await self.call_openai(
            system_prompt=system_prompt,
            user_prompt=user_prompt,
            model="gpt-4o",
            temperature=0.2,
            response_format={"type": "json_object"}
        )

        parsed = json.loads(response)
        if not isinstance(parsed, dict):
            raise ValueError("Ungültiges JSON vom Modell.")

        return {
            "mission": parsed.get("mission", ""),
            "vision": parsed.get("vision", ""),
            "brand_voice": parsed.get("brand_voice", ""),
            "tone_guidelines": parsed.get("tone_guidelines", ""),
            "target_audience": parsed.get("target_audience", ""),
            "content_pillars": parsed.get("content_pillars", []) or [],
            "dos": parsed.get("dos", []) or [],
            "donts": parsed.get("donts", []) or [],
        }
