"""
OCR 数据处理
"""
import sys
from pathlib import Path
from typing import List, Dict, Tuple

# 添加父目录到路径
sys.path.insert(0, str(Path(__file__).parent.parent))

try:
	from table_line_generator import TableLineGenerator
except ImportError:
	from ..table_line_generator import TableLineGenerator


def parse_ocr_data(raw_data: Dict, tool: str = "ppstructv3") -> Tuple[List[int], List[Dict]]:
    """
    解析 OCR 数据（根据工具类型自动选择解析方法）
    
    Args:
        raw_data: 原始 OCR 结果
        tool: 工具类型 ("ppstructv3" 或 "mineru")
    
    Returns:
        (table_bbox, ocr_data): 表格边界框和文本框列表
    """
    if tool.lower() == "mineru":
        # 使用 MinerU 专用解析方法
        table_bbox, structure = TableLineGenerator.parse_mineru_table_result(raw_data)
        
        # 🔑 将结构转换为 ocr_data 格式（兼容现有逻辑）
        ocr_data = []
        for row in structure['rows']:
            for bbox in row['bboxes']:
                ocr_data.append({
                    'bbox': bbox,
                    'text': ''  # MinerU 可能没有文本，或需要从 table_cells 提取
                })
        
        return table_bbox, ocr_data
    
    elif tool.lower() == "ppstructv3":
        # 🔑 PPStructure V3 格式
        return TableLineGenerator.parse_ppstructure_result(raw_data)
    
    else:
        raise ValueError(f"不支持的工具类型: {tool}，支持的类型: ppstructv3, mineru")


def get_structure_from_ocr(
    raw_data: Dict, 
    tool: str = "ppstructv3"
) -> Tuple[List[int], Dict]:
    """
    从 OCR 数据直接生成表格结构
    
    Args:
        raw_data: 原始 OCR 结果
        tool: 工具类型
    
    Returns:
        (table_bbox, structure): 表格边界框和结构信息
    """
    if tool.lower() == "mineru":
        # 🔑 MinerU：直接传入完整 JSON，方法内部会提取 table
        return TableLineGenerator.parse_mineru_table_result(raw_data)
    
    elif tool.lower() == "ppstructv3" or tool.lower() == "ppstructure":
        # 🔑 PPStructure V3：需要先解析再分析
        table_bbox, ocr_data = TableLineGenerator.parse_ppstructure_result(raw_data)
        
        # 使用临时生成器分析结构
        from PIL import Image
        dummy_image = Image.new('RGB', (2000, 3000), 'white')
        generator = TableLineGenerator(dummy_image, ocr_data)
        structure = generator.analyze_table_structure()
        
        return table_bbox, structure
    
    else:
        raise ValueError(f"不支持的工具类型: {tool}")

