# Copyright (c) 2025 Patrick Motsch
# All rights reserved.

"""
Formatting helper for Context operations.
Handles formatting of document indexes in different formats.
"""

import logging
from typing import Dict, Any

logger = logging.getLogger(__name__)

class FormattingHelper:
    """Helper for formatting operations"""
    
    def __init__(self, methodInstance):
        """
        Initialize formatting helper.
        
        Args:
            methodInstance: Instance of MethodContext (for access to services)
        """
        self.method = methodInstance
        self.services = methodInstance.services
    
    def formatAsMarkdown(self, indexData: Dict[str, Any]) -> str:
        """Format document index as Markdown."""
        try:
            md = f"# Document Index\n\n"
            md += f"**Workflow ID:** {indexData.get('workflowId', 'unknown')}\n\n"
            md += f"**Generated At:** {indexData.get('generatedAt', 'unknown')}\n\n"
            md += f"**Total Documents:** {indexData.get('totalDocuments', 0)}\n\n"
            
            if indexData.get('rounds'):
                md += "## Documents by Round\n\n"
                for roundInfo in indexData['rounds']:
                    roundLabel = roundInfo.get('round', 'unknown').title()
                    md += f"### {roundLabel} Round\n\n"
                    md += f"**Document List:** `{roundInfo.get('reference', 'unknown')}`\n\n"
                    if roundInfo.get('documents'):
                        md += "**Documents:**\n\n"
                        for docRef in roundInfo['documents']:
                            md += f"- `{docRef}`\n"
                        md += "\n"
            
            if indexData.get('documentReferences'):
                md += "## All Document References\n\n"
                for docRef in indexData['documentReferences']:
                    md += f"- `{docRef.get('reference', 'unknown')}`\n"
            
            return md
            
        except Exception as e:
            logger.error(f"Error formatting as Markdown: {str(e)}")
            return f"# Document Index\n\nError formatting index: {str(e)}\n"
    
    def formatAsText(self, indexData: Dict[str, Any], rawIndex: str) -> str:
        """Format document index as plain text."""
        try:
            text = "Document Index\n"
            text += "=" * 50 + "\n\n"
            text += f"Workflow ID: {indexData.get('workflowId', 'unknown')}\n"
            text += f"Generated At: {indexData.get('generatedAt', 'unknown')}\n"
            text += f"Total Documents: {indexData.get('totalDocuments', 0)}\n\n"
            
            # Include the raw formatted index for readability
            text += rawIndex
            
            return text
            
        except Exception as e:
            logger.error(f"Error formatting as text: {str(e)}")
            return f"Document Index\n\nError formatting index: {str(e)}\n\nRaw index:\n{rawIndex}\n"

