"""
FScanpy数据模块
提供测试数据访问和处理功能
"""

import os
from pathlib import Path
from typing import List

def get_test_data_path(filename: str) -> str:
    """
    获取测试数据文件的完整路径
    
    Args:
        filename: 测试数据文件名
        
    Returns:
        str: 文件的完整路径
        
    Examples:
        >>> from FScanpy.data import get_test_data_path
        >>> blastx_file = get_test_data_path('blastx_example.xlsx')
        >>> mrna_file = get_test_data_path('mrna_example.fasta')
        >>> region_file = get_test_data_path('region_example.csv')
    """
    current_dir = Path(__file__).parent
    test_data_dir = current_dir / "test_data"
    file_path = test_data_dir / filename
    
    if not file_path.exists():
        available_files = list_test_data()
        raise FileNotFoundError(
            f"测试数据文件不存在: {filename}\n"
            f"可用的测试数据文件: {available_files}"
        )
    
    return str(file_path)

def list_test_data() -> List[str]:
    """
    列出所有可用的测试数据文件
    
    Returns:
        List[str]: 测试数据文件名列表
        
    Examples:
        >>> from FScanpy.data import list_test_data
        >>> files = list_test_data()
        >>> print(files)
        ['blastx_example.xlsx', 'mrna_example.fasta', 'region_example.csv']
    """
    try:
        current_dir = Path(__file__).parent
        test_data_dir = current_dir / "test_data"
        
        if not test_data_dir.exists():
            return []
        
        files = []
        for file_path in test_data_dir.iterdir():
            if file_path.is_file() and not file_path.name.startswith('.'):
                files.append(file_path.name)
        
        return sorted(files)
        
    except Exception:
        return []

def print_test_data_info():
    """
    打印测试数据的详细信息
    """
    print("📋 FScanpy 测试数据信息:")
    print("=" * 50)
    
    try:
        current_dir = Path(__file__).parent
        test_data_dir = current_dir / "test_data"
        
        if not test_data_dir.exists():
            print("❌ 测试数据目录不存在")
            return
        
        files = list_test_data()
        if not files:
            print("❌ 没有找到测试数据文件")
            return
        
        print(f"📁 数据目录: {test_data_dir}")
        print(f"📊 文件数量: {len(files)}")
        print()
        
        file_descriptions = {
            'blastx_example.xlsx': '🧬 BLASTX比对结果示例 (1000条记录)',
            'mrna_example.fasta': '🧬 mRNA序列示例数据',
            'region_example.csv': '🎯 PRF区域验证数据 (含标签)'
        }
        
        for filename in files:
            file_path = test_data_dir / filename
            size_mb = file_path.stat().st_size / (1024 * 1024)
            
            description = file_descriptions.get(filename, '📄 数据文件')
            print(f"  {description}")
            print(f"    文件名: {filename}")
            print(f"    大小: {size_mb:.2f} MB")
            print(f"    路径: {file_path}")
            print()
        
        print("🚀 使用示例:")
        print("  from FScanpy.data import get_test_data_path")
        print("  blastx_file = get_test_data_path('blastx_example.xlsx')")
        print("  mrna_file = get_test_data_path('mrna_example.fasta')")
        print("  region_file = get_test_data_path('region_example.csv')")
        
    except Exception as e:
        print(f"❌ 获取数据信息时出错: {e}")

# 导出主要函数
__all__ = ['get_test_data_path', 'list_test_data', 'print_test_data_info']