"""ContentCrew — hierarchical outliner + drafter + editor pipeline.

Generated by ``cognithor init --template content``. Uses the hierarchical
process: a Manager LLM (``ollama/qwen3:32b``) delegates work across the
three agents and reviews the final deliverable.
"""

from __future__ import annotations

from cognithor.crew import Crew, CrewAgent, CrewProcess, CrewTask
from cognithor.crew.decorators import agent, crew, task


class ContentCrew:
    """Hierarchical content production pipeline.

    - ``outliner`` builds a structural outline from ``{topic}``.
    - ``drafter`` fills the outline with a first-pass draft.
    - ``editor`` polishes the draft for voice, flow, and grammar.
    - A Manager LLM oversees the whole pipeline.
    """

    @agent
    def outliner(self) -> CrewAgent:
        return CrewAgent(
            role="Outliner",
            goal="Erstelle eine klare Struktur fuer den Content zum Thema '{topic}'",
            backstory=(
                "Strukturierungs-Spezialist mit Blick fuer logischen Aufbau."
            ),
            llm="ollama/qwen3:8b",
        )

    @agent
    def drafter(self) -> CrewAgent:
        return CrewAgent(
            role="Drafter",
            goal="Verfasse einen ersten Entwurf auf Basis des Outlines",
            backstory=(
                "Produktiver Content-Schreiber — liefert schnell "
                "einen nutzbaren Rohtext."
            ),
            llm="ollama/qwen3:8b",
        )

    @agent
    def editor(self) -> CrewAgent:
        return CrewAgent(
            role="Editor",
            goal="Redigiere den Entwurf fuer Stil, Fluss und Grammatik",
            backstory=(
                "Erfahrener Lektor mit Auge fuer Details und guten "
                "sprachlichen Ausdruck."
            ),
            llm="ollama/qwen3:8b",
        )

    @task
    def outline(self) -> CrewTask:
        return CrewTask(
            description="Erstelle eine Gliederung zum Thema: {topic}",
            expected_output="Hierarchische Outline mit H2/H3-Ebenen.",
            agent=self.outliner(),
        )

    @task
    def draft(self) -> CrewTask:
        return CrewTask(
            description="Schreibe einen ersten Entwurf auf Basis der Outline.",
            expected_output="Vollstaendiger Rohtext, 800-1200 Woerter.",
            agent=self.drafter(),
            context=[self.outline()],
        )

    @task
    def edit(self) -> CrewTask:
        return CrewTask(
            description="Redigiere den Entwurf.",
            expected_output="Finaler Text, 800-1200 Woerter, poliert.",
            agent=self.editor(),
            context=[self.draft()],
        )

    @crew
    def assemble(self) -> Crew:
        return Crew(
            agents=[self.outliner(), self.drafter(), self.editor()],
            tasks=[self.outline(), self.draft(), self.edit()],
            process=CrewProcess.HIERARCHICAL,
            manager_llm="ollama/qwen3:32b",
            verbose=True,
        )
