"""
财务报表解析工具函数
"""

import logging
import io
from typing import Dict, Any
from pathlib import Path
import pdfplumber

logger = logging.getLogger(__name__)


def parse_pdf(pdf_content: bytes) -> Dict[str, Any]:
    """
    快速解析 PDF 内容的便捷函数
    
    Args:
        pdf_content: PDF 文件的二进制内容
        
    Returns:
        解析结果字典
    """
    from .parser import FinancialReportParser
    
    parser = FinancialReportParser()
    return parser.parse_pdf(pdf_content)


def extract_text(file_path: str) -> str:
    """
    从文件中提取文本内容
    
    Args:
        file_path: 文件路径
        
    Returns:
        提取的文本内容
    """
    file_path = Path(file_path)
    
    if not file_path.exists():
        raise FileNotFoundError(f"文件不存在: {file_path}")
    
    if not validate_file(str(file_path)):
        raise ValueError(f"不支持的文件格式: {file_path.suffix}")
    
    logger.info(f"从文件提取文本: {file_path}")
    
    try:
        with open(file_path, 'rb') as f:
            pdf_content = f.read()
        
        # 使用 pdfplumber 提取文本
        with pdfplumber.open(io.BytesIO(pdf_content)) as pdf:
            text_parts = []
            for page in pdf.pages:
                text = page.extract_text()
                if text:
                    text_parts.append(text)
            
            return '\n'.join(text_parts)
            
    except Exception as e:
        logger.error(f"文本提取失败: {e}")
        raise


def read_pdf_file(file_path: str) -> bytes:
    """
    读取 PDF 文件内容
    
    Args:
        file_path: PDF 文件路径
        
    Returns:
        PDF 文件的二进制内容
    """
    file_path = Path(file_path)
    
    if not file_path.exists():
        raise FileNotFoundError(f"文件不存在: {file_path}")
    
    if not validate_file(str(file_path)):
        raise ValueError(f"不支持的文件格式: {file_path.suffix}")
    
    with open(file_path, 'rb') as f:
        return f.read()


def validate_file(file_path: str) -> bool:
    """
    验证文件格式是否支持
    
    Args:
        file_path: 文件路径
        
    Returns:
        是否支持该文件格式
    """
    file_path = Path(file_path)
    supported_extensions = {'.pdf', '.xlsx', '.xls', '.csv'}
    
    return file_path.suffix.lower() in supported_extensions 