# 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_demo.trn"
    )
    transcript_started = True

    if settings.setup.models.is_active():
        settings.file.write_case_data(
            file_name=task_directory + r"\previous_electronics_backup.cas.h5"
        )

    mesh = fluentagi.build_planar(
        directory=task_directory,
        points=[
            [0.0, 0.0],
            [0.0, 0.01],
            [0.04, 0.01],
            [0.04, 0.0],
        ],
        inlet_edges=[0],
        outlet_edges=[2],
        size=0.0005,
        mesh_type="quad",
    )
    print("MESH_RESULT", mesh)
    settings.file.read_mesh(file_name=mesh["mesh_file"])
    settings.mesh.check()

    if not settings.setup.models.is_active():
        raise RuntimeError("气液两相网格读取后模型未激活。")

    settings.setup.models.energy.enabled = False

    configuration = fluentagi.configure_water_air(
        directory=task_directory,
        velocity=0.05,
        time_step=0.001,
        gravity_y=-9.81,
        inlet="inlet",
        outlet="outlet",
    )
    print("WATER_AIR_CONFIGURATION", configuration)

    phases = fluentagi.inspect_phases()
    print("PHASE_READBACK", phases)
    phase_state = settings.setup.phases.get_state()
    print("NATIVE_PHASE_READBACK", phase_state)
    if "water-liquid" not in str(phase_state.get("phase-2", {})):
        raise RuntimeError("未确认 phase-2 为 water-liquid，停止初始化及动画。")

    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)

    print("MODELS_READBACK", settings.setup.models.get_state())
    print("BOUNDARIES_READBACK", settings.setup.boundary_conditions.get_state())
    print("RESIDUAL_SETTINGS", settings.solution.monitor.residual.get_state())

    initialization = fluentagi.initialize_air(directory=task_directory)
    print("INITIALIZATION_RESULT", initialization)

    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。")

    settings.file.write_case_data(
        file_name=task_directory + r"\water_air_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_final.cas.h5"
    )
    exports = fluentagi.export_results(
        directory=task_directory,
        fields=["phase-2-vof", "velocity-magnitude", "pressure"],
    )
    print("EXPORT_RESULTS", exports)
    print(
        "计划推进200个物理时间步，总时长0.2秒；"
        "实际完成时间、帧数及文件以适配器返回结果为准。"
        "水相体积分数展示气液界面，0.2秒仅为早期充液过程，"
        "不能据此声称40毫米流道已经充满。"
        "瞬态计算质量还需核对逐步残差、质量守恒和时间步敏感性。"
    )

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