"""
PDF text extraction utilities.

Provides text extraction from PDF files using pypdf or PyPDF2.
"""

from litellm._logging import verbose_logger


def extract_text_from_pdf(file_content: bytes) -> str | None:
    """
    Extract text from PDF using pypdf if available.

    Args:
        file_content: Raw PDF bytes

    Returns:
        Extracted text or None if extraction fails
    """
    try:
        from io import BytesIO

        # Try pypdf first (most common)
        try:
            from pypdf import PdfReader as PypdfReader

            pdf_file = BytesIO(file_content)
            reader = PypdfReader(pdf_file)

            text_parts = []
            for page in reader.pages:
                text = page.extract_text()
                if text:
                    text_parts.append(text)

            if text_parts:
                extracted_text = "\n\n".join(text_parts)
                verbose_logger.debug("Extracted %s characters from PDF using pypdf", len(extracted_text))
                return extracted_text

        except ImportError:
            verbose_logger.debug("pypdf not available, trying PyPDF2")

        # Fallback to PyPDF2
        try:
            from PyPDF2 import PdfReader as PyPDF2Reader

            pdf_file = BytesIO(file_content)
            reader = PyPDF2Reader(pdf_file)

            text_parts = []
            for page in reader.pages:
                text = page.extract_text()
                if text:
                    text_parts.append(text)

            if text_parts:
                extracted_text = "\n\n".join(text_parts)
                verbose_logger.debug("Extracted %s characters from PDF using PyPDF2", len(extracted_text))
                return extracted_text

        except ImportError:
            verbose_logger.debug("PyPDF2 not available, PDF extraction requires OCR or pypdf/PyPDF2 library")

    except Exception as e:
        verbose_logger.debug("PDF text extraction failed: %s", e)

    return None
