from pydantic import BaseModel, Field

from haiku.rag.research.base import BaseResearchAgent
from haiku.rag.research.prompts import SYNTHESIS_AGENT_PROMPT


class ResearchReport(BaseModel):
    """Final research report structure."""

    title: str = Field(description="Concise title for the research")
    executive_summary: str = Field(description="Brief overview of key findings")
    main_findings: list[str] = Field(
        description="Primary research findings with supporting evidence"
    )
    conclusions: list[str] = Field(description="Evidence-based conclusions")
    limitations: list[str] = Field(
        description="Limitations of the current research", default=[]
    )
    recommendations: list[str] = Field(
        description="Actionable recommendations based on findings", default=[]
    )
    sources_summary: str = Field(
        description="Summary of sources used and their reliability"
    )


class SynthesisAgent(BaseResearchAgent[ResearchReport]):
    """Agent specialized in synthesizing research into comprehensive reports."""

    def __init__(self, provider: str, model: str) -> None:
        super().__init__(provider, model, output_type=ResearchReport)

    def get_system_prompt(self) -> str:
        return SYNTHESIS_AGENT_PROMPT

    def register_tools(self) -> None:
        """Register synthesis-specific tools."""
        # The agent will use its LLM capabilities directly for synthesis
        # The structured output will guide the report generation
        pass
