# Use the existing connected PyFluent variable solver.
task_directory = r"C:\Users\13977\AppData\Local\FluentAGI\data\runs\20261018-132050-5ceecd"
settings = solver.settings
transcript_started = False

try:
    settings.file.start_transcript(
        file_name=task_directory + r"\water_air_repair.trn"
    )
    transcript_started = True

    if not settings.setup.models.is_active():
        raise RuntimeError("当前网格未激活，与执行反馈不符，停止修改。")

    settings.mesh.check()
    print("CURRENT_MODELS", settings.setup.models.get_state())
    print("CURRENT_BOUNDARIES", settings.setup.boundary_conditions.get_state())
    settings.file.write_case(
        file_name=task_directory + r"\water_air_before_repair.cas.h5"
    )

    phases = fluentagi.inspect_phases()
    print("PHASE_READBACK", phases)
    phase_materials = {
        item["phase"]: item["material"]
        for item in phases
    }
    if phase_materials.get("phase-1") != "air":
        raise RuntimeError("主相不是 air，停止计算。")
    if phase_materials.get("phase-2") != "water-liquid":
        raise RuntimeError("次相不是 water-liquid，停止计算。")
    if len(phase_materials) != 2:
        raise RuntimeError("当前并非指定的两相模型。")

    surface_tension = fluentagi.configure_surface_tension(
        directory=task_directory,
        coefficient=0.072,
        phase_a="phase-1",
        phase_b="phase-2",
    )
    print("SURFACE_TENSION_RESULT", surface_tension)

    contours = settings.results.graphics.contour
    contour_name = "water_air_field_check"
    if contour_name not in contours.get_object_names():
        contours.create(name=contour_name)
    allowed_fields = contours[contour_name].field.allowed_values()
    print("ALLOWED_CONTOUR_FIELDS", allowed_fields)
    if "phase-2-vof" not in allowed_fields:
        raise RuntimeError("当前云图字段中未找到 phase-2-vof。")

    print("RESIDUAL_SETTINGS", settings.solution.monitor.residual.get_state())
    initialization = fluentagi.initialize_air(directory=task_directory)
    print("INITIALIZATION_RESULT", initialization)

    settings.file.write_case_data(
        file_name=task_directory + r"\water_air_repair_initial.cas.h5"
    )

    animation = fluentagi.record_animation(
        directory=task_directory,
        field="phase-2-vof",
        frames=21,
        steps_per_frame=10,
        max_iter_per_step=30,
    )
    print("WATER_FRACTION_ANIMATION", animation)

    settings.file.write_case_data(
        file_name=task_directory + r"\water_air_repair_final.cas.h5"
    )
    exports = fluentagi.export_results(
        directory=task_directory,
        fields=["phase-2-vof", "velocity-magnitude", "pressure"],
    )
    print("EXPORT_RESULTS", exports)
    print(
        "本轮沿用已有1600单元网格和已配置的水空气VOF模型。"
        "上一轮在初始化前停止，本轮执行首次空气初始化。"
        "动画计划推进200个时间步，时间增量0.2秒；"
        "实际完成时间、帧数和GIF以适配器返回结果为准。"
        "这是早期充液过程，不能据此声称流道已充满；"
        "逐时间步收敛和质量守恒仍需根据实际日志检查。"
    )

finally:
    if transcript_started:
        settings.file.stop_transcript()