"""Info Definition Generator Test - 从文本自动生成关键信息定义的示例.

演示如何使用 InfoExtractor.extract_definition 从输入文本中
自动生成结构化的关键信息定义 JSON。

用法:
    python test_definition.py
"""

from __future__ import annotations

import json
import logging
import os

from src.extractor import InfoExtractor

logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s [%(levelname)s] %(name)s: %(message)s",
)

# 示例输入文本：与 test.py 一致，但仅用于生成信息定义
SAMPLE_ARTICLE = (
    """保卫延安的命令
一、敌以五师十二旅约八万人进攻延安，经三天猛烈攻击，突破我第一线阵地，由于我军坚决英勇抵抗，敌伤亡甚大，困难增加，颇疲劳，今后将更甚。
二、我边区各兵团有坚决保卫延安任务，必须在三十里铺、松树岭线以南，甘泉、南泥湾、金盆湾地区再抗击十天至两星期（十六日至二十九日），才能取得外线配合，粉碎胡军进攻延安企图。为完成上述任务，各兵团守备任务区分如下：
１．独一旅、八旅、警七团为右翼兵团，归张宗逊廖汉生同志指挥，在道佐铺、甘泉、大小劳山、清泉沟、山神庙地区组织防御战斗，坚决抗击。
２．教导旅、二纵队（王震部）为左翼兵团，归王震罗元发同志指挥，在王震未到前由罗元发同志指挥。教导旅在南泥湾、金盆湾、临真、松树岭地区组织防御战斗。上述地区至少坚持七天。
３．新四旅为中央兵团，以不少于四个营兵力在庙尔梁、程子沟（不含）、三十里铺地区组织防御战斗，坚决抗击由南泥湾向延安前进之敌。旅属炮兵应加强庙尔梁阵地。余为预备队，位置延安，兼防敌伞兵控制机场。该旅首长仍兼延安卫戍。
三、各守备兵团应利用地形组织短促火力，大量使用手榴弹、地雷杀伤敌人，掌握预备队，灵活反击夜袭歼灭敌小部。
四、在防御战斗中疲劳与消耗敌人之后，即可集五个旅以上打运动战，各个歼灭敌人，彻底粉碎敌人进攻。
此令
中央革命军事委员会主席  毛泽东
一九四七年三月十六日
"""
)


def main() -> None:
    # 复用 test.py 中的 API 配置
    extractor = InfoExtractor(
        model_name="glm-5.2",
        api_key=os.environ.get("INFO_EXTRACTOR_API_KEY", "18fadfc9bd0a49db85b95c36910ab347.oJDKNbgKqdEGzb77"),
        base_url=os.environ.get("INFO_EXTRACTOR_BASE_URL", "https://open.bigmodel.cn/api/coding/paas/v4"),
        temperature=0,
        max_retries=3,
    )

    # 从文本中提取关键信息定义
    definition = extractor.extract_definition(
        text=SAMPLE_ARTICLE,
        verbose=True,
        debug=True,
    )

    # 输出生成的定义
    print("\n" + "=" * 60)
    print("生成的关键信息定义:")
    print("=" * 60)
    print(json.dumps(definition, ensure_ascii=False, indent=2))


if __name__ == "__main__":
    main()
