#!/usr/bin/env python3
"""
MDF文件导出功能测试脚本
测试SQL Server数据库文件导出功能
"""

import os
import sys
import tempfile
from pathlib import Path

# 添加项目路径到Python路径
sys.path.append(os.path.dirname(os.path.abspath(__file__)))

def check_sql_server_connection():
    """检查SQL Server连接"""
    print("🔍 检查SQL Server连接...")
    
    try:
        import pyodbc
        
        # 测试连接参数
        test_servers = [
            ('localhost', 'MSSQLSERVER'),
            ('.', 'MSSQLSERVER'),
            ('localhost\\SQLEXPRESS', 'SQLEXPRESS')
        ]
        
        connected = False
        for server, instance in test_servers:
            try:
                if instance == 'MSSQLSERVER':
                    conn_str = f"DRIVER={{SQL Server}};SERVER={server};Trusted_Connection=yes;"
                else:
                    conn_str = f"DRIVER={{SQL Server}};SERVER={server}\\{instance};Trusted_Connection=yes;"
                
                conn = pyodbc.connect(conn_str, timeout=5)
                cursor = conn.cursor()
                cursor.execute("SELECT @@version")
                version = cursor.fetchone()[0]
                
                print(f"✅ 连接到 {server}\\{instance}")
                print(f"   SQL Server版本: {version.split('\\n')[0]}")
                connected = True
                conn.close()
                break
                
            except Exception as e:
                print(f"❌ 无法连接到 {server}\\{instance}: {e}")
        
        if not connected:
            print("⚠️ 未找到可用的SQL Server实例")
            print("   请安装SQL Server或检查服务状态")
        
        return connected
        
    except ImportError:
        print("❌ pyodbc未安装")
        return False

def test_mdf_export_module():
    """测试MDF导出模块"""
    print("\n🧪 测试MDF导出模块...")
    
    try:
        from utils.database_exporter import (
            export_mssql_mdf_to_excel, 
            export_mssql_mdf_to_csv, 
            export_mssql_mdf_to_json
        )
        print("✅ MDF导出模块导入成功")
        
        # 检查函数是否存在
        functions = [
            export_mssql_mdf_to_excel,
            export_mssql_mdf_to_csv, 
            export_mssql_mdf_to_json
        ]
        
        for func in functions:
            print(f"✅ {func.__name__} 函数可用")
        
        return True
        
    except Exception as e:
        print(f"❌ MDF导出模块测试失败: {e}")
        return False

def create_sample_mdf_info():
    """创建示例MDF文件信息"""
    print("\n📋 示例MDF文件信息:")
    
    sample_info = """
💡 要测试MDF文件导出功能，您需要：

1. **现有的.mdf文件**
   - 从现有SQL Server数据库分离的.mdf文件
   - 或使用SQL Server创建测试数据库

2. **SQL Server实例**
   - 本地安装的SQL Server
   - 或可访问的远程SQL Server

3. **连接权限**
   - 数据库读取权限
   - 附加数据库权限

🔧 创建测试MDF文件的步骤：

1. 在SQL Server Management Studio中：
   ```sql
   -- 创建测试数据库
   CREATE DATABASE TestMDFExport;
   GO
   
   -- 创建测试表
   USE TestMDFExport;
   CREATE TABLE Students (
       ID INT PRIMARY KEY,
       Name NVARCHAR(50),
       Age INT,
       Major NVARCHAR(50)
   );
   
   -- 插入测试数据
   INSERT INTO Students VALUES 
   (1, '张三', 20, '计算机科学'),
   (2, '李四', 21, '数据科学'),
   (3, '王五', 19, '人工智能');
   ```

2. 分离数据库获取.mdf文件：
   ```sql
   -- 分离数据库
   USE master;
   GO
   EXEC sp_detach_db 'TestMDFExport', 'true';
   ```

3. 数据库文件位置：
   - 默认路径: C:\\Program Files\\Microsoft SQL Server\\...\\DATA\\
   - 文件: TestMDFExport.mdf 和 TestMDFExport_log.ldf
"""
    
    print(sample_info)

def check_odbc_drivers():
    """检查可用的ODBC驱动程序"""
    print("\n🔌 检查ODBC驱动程序...")
    
    try:
        import pyodbc
        
        drivers = pyodbc.drivers()
        if drivers:
            print("✅ 找到以下ODBC驱动程序:")
            for driver in drivers:
                print(f"   - {driver}")
            
            # 检查SQL Server相关驱动
            sql_drivers = [d for d in drivers if 'SQL Server' in d]
            if sql_drivers:
                print("\n✅ 找到SQL Server ODBC驱动程序")
            else:
                print("\n⚠️ 未找到SQL Server ODBC驱动程序")
                print("   请安装ODBC Driver for SQL Server")
        else:
            print("❌ 未找到ODBC驱动程序")
            
    except Exception as e:
        print(f"❌ 检查ODBC驱动程序失败: {e}")

def main():
    """主测试函数"""
    print("=" * 60)
    print("MDF文件导出功能测试")
    print("=" * 60)
    
    # 检查ODBC驱动
    check_odbc_drivers()
    
    # 检查SQL Server连接
    sql_connected = check_sql_server_connection()
    
    # 测试MDF导出模块
    module_ok = test_mdf_export_module()
    
    # 显示示例信息
    create_sample_mdf_info()
    
    print("\n" + "=" * 60)
    print("测试总结")
    print("=" * 60)
    
    if sql_connected and module_ok:
        print("✅ MDF导出功能配置正确")
        print("💡 您可以上传.mdf文件测试导出功能")
    else:
        print("⚠️ MDF导出功能需要额外配置")
        
        if not sql_connected:
            print("   - 需要安装或配置SQL Server")
        if not module_ok:
            print("   - 需要检查模块依赖")
    
    print("\n🚀 下一步操作:")
    print("1. 确保SQL Server服务运行")
    print("2. 准备.mdf测试文件")
    print("3. 访问应用测试导出功能")
    print("4. 参考SQL_SERVER_SETUP.md获取详细配置说明")

if __name__ == "__main__":
    main()