from __future__ import annotations

from app.services.scenes.gate_rules import GateRule, SceneRoute
from app.services.scenes.scene_descriptor import SceneDescriptor
from app.services.scenes.scene_registry import register_scene


def register() -> None:
    register_scene(
        SceneDescriptor(
            scene_id="expense_application",
            label="费用申请",
            assigned_agent="application_assistant",
            signal_keywords=(
                "申请", "出差", "差旅", "费用", "交通", "住宿", "采购", "会务", "会议",
                "客户现场", "项目", "拜访", "调研", "驻场", "上线", "验收",
            ),
            ontology_fields=(),  # 沿用全局 BUSINESS_CANONICAL_FIELDS,运行时 fallback
            gate=GateRule.MODEL_ONLY,
            route=SceneRoute.MODEL_INTENT,
            handler=None,
            action_steps_builder=None,  # 运行时从 StewardActionPlanBuilder 取
            can_resume=True,
            flow_id="travel_application",
            side_effect_actions=("save_application_draft", "submit_application", "run_duplicate_precheck"),
            noop_actions=(
                "fill_application_fields",
                "build_application_preview",
                "validate_required_fields",
            ),
            executor=None,  # 运行时从 StewardActionExecutor 取
            prompt_fragment=(
                "用户描述未来出差、差旅计划、去某地几天、部署、支撑、拜访或会议安排时,"
                "即使没有出现“申请”两个字，也必须优先识别为 expense_application。"
            ),
            priority=100,
        )
    )
