"""
Phase 1 简化测试
"""

import tempfile
import shutil
from pathlib import Path
import pandas as pd
import pytest

from app.utils.file_hash import calculate_file_sha1
from app.utils.excel_reader import ExcelReader
from app.services.import_service import ImportService


@pytest.fixture
def temp_directory():
    """创建临时目录"""
    temp_dir = tempfile.mkdtemp()
    yield Path(temp_dir)
    shutil.rmtree(temp_dir)


@pytest.fixture
def sample_excel_file(temp_directory):
    """创建示例Excel文件"""
    data = {
        '原始订单编号': ['ORDER001', 'ORDER001', 'ORDER002'],
        '网店名称': ['测试店铺', '测试店铺', '测试店铺'],
        '交易状态': ['交易成功', '交易成功', '交易关闭'],
        '付款时间': ['2025-01-15 10:30:00', '2025-01-15 10:30:00', '2025-01-16 14:20:00'],
        '线上宝贝名称': ['Nike 运动鞋', 'Nike T恤', 'Adidas 外套'],
        '线上销售属性': ['颜色:黑色;尺码:42', '颜色:白色;尺码:L', '颜色:蓝色;尺码:XL'],
        '线上商家编码': ['NK001', 'NK002', 'AD001'],
        '数量': [1, 2, 1],
        '订单单价': [599.0, 199.0, 899.0]
    }
    
    df = pd.DataFrame(data)
    excel_path = temp_directory / 'test_orders.xlsx'
    df.to_excel(excel_path, index=False)
    
    return excel_path


def test_file_hash_calculation(sample_excel_file):
    """测试文件哈希计算"""
    hash1 = calculate_file_sha1(sample_excel_file)
    hash2 = calculate_file_sha1(sample_excel_file)
    
    # 同一文件的哈希值应该相同
    assert hash1 == hash2
    assert len(hash1) == 40  # SHA1是40个字符的十六进制字符串


def test_excel_reader_basic(sample_excel_file):
    """测试Excel读取器基本功能"""
    reader = ExcelReader()
    
    # 读取Excel文件
    df = reader.read_excel(sample_excel_file)
    assert len(df) == 3
    assert '原始订单编号' in df.columns
    
    # 规范化列名
    df_normalized = reader.normalize_column_names(df)
    assert all(isinstance(col, str) for col in df_normalized.columns)
    
    # 清理数据
    df_cleaned = reader.clean_data(df_normalized)
    assert len(df_cleaned) == 3


def test_excel_reader_process_file(sample_excel_file):
    """测试Excel文件处理流程"""
    reader = ExcelReader()
    records = reader.process_excel_file(sample_excel_file)
    
    assert len(records) == 3
    
    # 检查第一条记录
    first_record = records[0]
    assert first_record['原始订单编号'] == 'ORDER001'
    assert first_record['网店名称'] == '测试店铺'
    assert first_record['数量'] == 1 or first_record['数量'] == '1'  # 可能是字符串
    assert float(first_record['订单单价']) == 599.0
    assert 'row_idx' in first_record


def test_import_service_scan_files(temp_directory, sample_excel_file):
    """测试文件扫描功能"""
    # 创建导入服务
    import_service = ImportService()
    
    # 手动测试扫描逻辑
    from app.core.config import settings
    original_path = settings.SHARED_INBOX_DIR
    settings.SHARED_INBOX_DIR = str(temp_directory)
    
    try:
        # 使用同步方法进行基本测试
        files = list(temp_directory.glob("*.xlsx"))
        assert len(files) == 1
        assert files[0].name == 'test_orders.xlsx'
    finally:
        settings.SHARED_INBOX_DIR = original_path


if __name__ == '__main__':
    pytest.main([__file__, '-v'])