"""
Summarizer Agent for CrewAI workflow.
"""
from crewai import Agent, Task
from typing import Dict, Any

class SummarizerAgent:
    """Agent responsible for summarizing translated transcripts."""
    
    def __init__(self, perplexity_llm):
        """
        Initialize the summarizer agent.
        
        Args:
            perplexity_llm: Configured LLM for CrewAI
        """
        self.agent = self._create_agent(perplexity_llm)
    
    def _create_agent(self, llm) -> Agent:
        """Create the CrewAI agent for summarization."""
        return Agent(
            role='Content Summarizer',
            goal='Create clear, concise, and comprehensive summaries based on specific requirements',
            backstory="""You are an expert content analyst with exceptional summarization 
            skills. You excel at distilling complex information into clear, organized 
            summaries that capture the essential points while maintaining readability. 
            Your summaries are always tailored to specific requirements and target 
            audiences.""",
            verbose=True,
            allow_delegation=False,
            llm=llm
        )
    
    def create_summarization_task(self, translated_text: str, summarization_prompt: str) -> Task:
        """
        Create a summarization task for translated text.
        
        Args:
            translated_text: The translated text to summarize
            summarization_prompt: Custom prompt for summarization requirements
            
        Returns:
            CrewAI Task for summarization
        """
        return Task(
            description=f"""
            Summarize the following translated text according to the specific requirements:
            
            Translated Text:
            {translated_text}
            
            Summarization Requirements:
            {summarization_prompt}
            
            Your task is to:
            1. Analyze the translated content thoroughly
            2. Follow the specific summarization instructions provided
            3. Create a well-structured summary that meets the requirements
            4. Ensure the summary is accurate and comprehensive
            5. Maintain clarity and readability
            
            Return only the summary without any additional comments or explanations.
            """,
            expected_output="Summary based on the provided requirements and prompt",
            agent=self.agent
        )
    
    def summarize(self, translated_text: str, summarization_prompt: str) -> str:
        """
        Summarize translated text based on custom prompt.
        
        Args:
            translated_text: Text to summarize
            summarization_prompt: Custom prompt for summarization
            
        Returns:
            Summarized text
        """
        try:
            # Clean text to handle encoding issues
            clean_text = translated_text.encode('utf-8', errors='ignore').decode('utf-8')
            
            # Create summarization task
            task = self.create_summarization_task(clean_text, summarization_prompt)
            
            # Create crew and execute
            from crewai import Crew
            crew = Crew(
                agents=[self.agent],
                tasks=[task],
                verbose=True
            )
            
            result = crew.kickoff()
            return str(result)
            
        except Exception as e:
            # Handle encoding errors gracefully
            error_msg = str(e)
            if 'charmap' in error_msg or 'encode' in error_msg:
                return f"Error: Unable to process text due to encoding issues. Original text: {translated_text[:100]}..."
            return f"Error summarizing text: {error_msg}"


