from gdisdk.connectors.gdimConnector import log_in
from gdisdk.modules.readers import GdimTableReader
from gdisdk.modules.writers import DocDataWriter, DocPrinter
from gdisdk.pipeline.pipeline import PipeLine

# ----- 初始化pipeline -------
pipeline = PipeLine(app_name="GenerateDoc", app_title="生成报告")
pipeline.update_gdim_state(token=log_in(), proj_id="1967572096104902658")
pipeline.workspace = "test"


# ---- 实例化模块 -------
# 读取GDIM表格数据
read_table = GdimTableReader(mname="ReadTable")
read_table.table_fields = ["钻孔一览表"]

# 转换生成报告所需数据格式
doc_data = DocDataWriter(mname="DocData")
doc_data.precision = 2

# 打印报告
print_doc = DocPrinter(mname="PrintDoc")
print_doc.template = "钻孔一览表模板.docx"
print_doc.output_name = "钻孔一览表.docx"
print_doc.save_to_gdim = True  # 需要上传GDIM运行时设置为True，否则为False


# ---- 链接模块 -------
links = read_table.OutputTables >> doc_data.InputData | doc_data.OutputDocData >> print_doc.InputDocData

# 添加模块和链接至pipeline
pipeline.add_links(links)

# 添加pipeline属性
pipeline.add_attribute(attr_name="template", module_name="PrintDoc", param_name="template", attr_title="报告模板")

# 保存pipeline
# 当仅给出文件名时，默认保存到脚本当前运行路径下，这里我们指定保存到pipeline工作目录下
pipeline.save_pipeline(file=f"{pipeline.workspace}/GenerateDoc.pipe")

# 运行pipeline
pipeline.run()

# 生成报告模板变量结构
# doc_data.OutputDocData.data.export_keys_to_json("bore_table_doc_keys.json")
output_file = print_doc.OutputFile.data
if output_file:
    # print_doc.save_to_gdim 为False时，output_file为本地文件路径
    # print_doc.save_to_gdim 为True时，output_file为GDIM文件对象（包含文件ID、文件名、文件路径等信息）
    print(f"报告生成成功，文件路径：{output_file}")
else:
    print("报告生成失败！")
