#!/usr/bin/env python3
import subprocess
import os
import sys

# 设置脚本所在目录为工作目录
script_dir = os.path.dirname(os.path.abspath(__file__))
os.chdir(script_dir)

# 获取命令行参数
type_param = sys.argv[1] if len(sys.argv) > 1 else 'USt'
year_param = sys.argv[2] if len(sys.argv) > 2 else '2025'

# 构建数据类型版本（ZMDO 不需要年份）
if type_param == 'ZMDO':
    datenart_version = 'ZMDO'
else:
    datenart_version = f'{type_param}_{year_param}'

# 构建命令（使用os.path.join避免转义问题）
command = [
    sys.executable, os.path.join(script_dir, 'eric', 'ericdemo.py'),
    '/v', datenart_version,
    '/x', os.path.join(script_dir, f'{type_param}_{year_param}.xml'),
    '/c', os.path.join(script_dir, 'cert', 'test-cert.pfx'),  # 修改证书路径，指向cert子目录 prod-cert.pfx
    '/p', '123456',#证书密码 测试未123456  Meiouwang1332!
    '/d', os.path.join(script_dir, 'lib'),  # 使用当前脚本目录下的lib文件夹
    '/l', os.path.join(script_dir, 'log'),
    '/s', os.path.join(script_dir, 'response'),
    '/senden'

]

# 执行命令
print("执行命令:", ' '.join(command))
try:
    # 捕获标准输出和标准错误，以获取税局返回的报错信息
    result = subprocess.run(command, capture_output=True, text=True, timeout=60)
    
    # 显示命令输出（包括税局返回的信息）
    print("\n=== 命令输出 ===")
    print(result.stdout)
    
    # 显示错误信息（如果有）
    if result.stderr:
        print("\n=== 错误信息 ===")
        print(result.stderr)
    
    print(f"\n命令执行完成，返回码: {result.returncode}")
    
    # 检查response目录是否有返回文件
    response_dir = os.path.join(script_dir, 'response')
    if os.path.exists(response_dir):
        response_files = os.listdir(response_dir)
        if response_files:
            print("\n=== 税局返回文件 ===")
            for file in response_files:
                print(f"- {file}")
                # 读取并显示返回文件内容
                file_path = os.path.join(response_dir, file)
                try:
                    with open(file_path, 'r', encoding='utf-8') as f:
                        content = f.read()
                        print(f"\n{file} 内容:")
                        print(content)
                except Exception as e:
                    print(f"读取文件 {file} 失败: {str(e)}")
except subprocess.TimeoutExpired:
    print("\n命令执行超时")
except KeyboardInterrupt:
    print("\n命令执行被用户中断")
except Exception as e:
    print(f"\n执行命令时出错: {str(e)}")

# 等待用户输入
input("\n按回车键退出...")