"""
Script Workflow State Definitions.

Defines the state structure for the Script workflow.
"""

from typing import TypedDict, List, Dict, Any, Optional


class ScriptState(TypedDict, total=False):
    """脚本理解工作流状态"""

    # ========== 输入数据 ==========
    text: Dict[str, Any]  # {title, body}
    images: List[str]  # 图片路径列表
    topic_selection_understanding: Optional[Dict[str, Any]]  # 选题理解结果
    content_weight: Optional[Dict[str, Any]]  # 内容权重结果
    inspiration_points: Optional[List[Dict[str, Any]]]  # 灵感点列表
    purpose_points: Optional[List[Dict[str, Any]]]  # 目的点列表
    key_points: Optional[List[Dict[str, Any]]]  # 关键点列表

    # ========== 段落划分结果 ==========
    section_division: Optional[Dict[str, Any]]  # 段落划分结果
    内容品类: str  # 内容品类
    段落列表: List[Dict[str, Any]]  # 段落列表

    # ========== SubstanceExtractionAgent 输出（实质提取）==========
    concrete_elements: List[Dict[str, Any]]  # 具体元素列表
    concrete_concepts: List[Dict[str, Any]]  # 具象概念列表
    implicit_concepts: List[Dict[str, Any]]  # 隐含概念列表
    abstract_concepts: List[Dict[str, Any]]  # 抽象概念列表
    substance_elements: List[Dict[str, Any]]  # 合并后的实质元素
    substance_analyzed_result: List[Dict[str, Any]]  # Step 3: 共性分析结果
    substance_scored_result: Dict[str, Any]  # Step 4: 评分结果
    substance_filtered_ids: List[int]  # Step 5: 筛选的元素ID
    substance_categorized_result: Dict[str, Any]  # Step 6: 分类结果
    substance_final_elements: List[Dict[str, Any]]  # 实质元素最终结果

    # ========== FormExtractionAgent 输出（形式提取）==========
    concrete_concept_forms: List[Dict[str, Any]]  # 具象概念形式
    concrete_element_forms: List[Dict[str, Any]]  # 具体元素形式
    overall_forms: List[Dict[str, Any]]  # 整体形式
    form_elements: List[Dict[str, Any]]  # 合并后的形式元素
    form_analyzed_result: List[Dict[str, Any]]  # Step 3: 共性分析结果
    form_scored_result: Dict[str, Any]  # Step 4: 评分结果
    form_filtered_ids: List[int]  # Step 5: 筛选的元素ID
    form_categorized_result: Dict[str, Any]  # Step 6: 分类结果
    form_final_elements: List[Dict[str, Any]]  # 形式元素最终结果

    # ========== 分离后的元素列表 ==========
    实质列表: List[Dict[str, Any]]  # 实质元素列表
    形式列表: List[Dict[str, Any]]  # 形式元素列表
    帖子倾向判断: Optional[Dict[str, Any]]  # 帖子倾向判断

    # ========== 最终输出 ==========
    final_result: Dict[str, Any]  # 最终的结果
