"""
错误信息格式化工具（中文）

提供统一的错误信息格式化函数，确保错误信息的一致性和可读性。
所有错误信息使用中文。
"""

from typing import List


def format_dependency_error(
    collection_name: str,
    node_id: str,
    data_id: str,
    errors: List[str]
) -> str:
    """
    格式化依赖错误信息（中文）
    
    Args:
        collection_name: "local" 或 "remote"
        node_id: 节点 ID
        data_id: 数据 ID
        errors: 依赖错误列表，如 ["未找到: project_id(project)=P1", "contract_id: 状态=失败"]
    
    Returns:
        格式化的中文错误信息
    
    示例:
        "依赖错误 (本地节点 node_id=xxx, data_id=yyy): 未找到: project_id(project)=P1; contract_id: 状态=失败"
    """
    collection_cn = "本地" if collection_name == "local" else "远程"
    error_str = "; ".join(errors)
    return f"依赖错误 ({collection_cn}节点 node_id={node_id}, data_id={data_id}): {error_str}"


def format_not_found_error(field_name: str, node_type: str, value: str) -> str:
    """
    格式化"未找到依赖项"错误（中文）
    
    Args:
        field_name: 字段名，如 "project_id"
        node_type: 节点类型，如 "project"
        value: 字段值，如 "P1"
    
    Returns:
        格式化的错误信息，如 "未找到: project_id(project)=P1"
    """
    return f"未找到: {field_name}({node_type})={value}"


def format_status_error(field_name: str, status: str) -> str:
    """
    格式化"依赖节点状态错误"（中文）
    
    Args:
        field_name: 字段名，如 "project_id"
        status: 状态值，如 "FAILED"
    
    Returns:
        格式化的错误信息，如 "project_id: 状态=失败"
    """
    # 状态名称映射
    status_name_map = {
        "FAILED": "失败",
        "MISSING": "缺失",
        "ABNORMAL": "异常",
        "WARNING": "警告",
        "DEPENDENCY_ERROR": "依赖错误",
        "NORMAL": "正常",
        "UNCHECKED": "未检查",
    }
    status_cn = status_name_map.get(status, status)
    return f"{field_name}: 状态={status_cn}"


def format_data_validation_error(node_type: str, error: str) -> str:
    """
    格式化数据校验错误（中文）
    
    Args:
        node_type: 节点类型
        error: 错误详情
    
    Returns:
        格式化的错误信息
    """
    return f"数据校验失败 ({node_type}): {error}"


def format_missing_field_error(missing_fields: List[str]) -> str:
    """
    格式化缺失字段错误（中文）
    
    Args:
        missing_fields: 缺失的字段列表
    
    Returns:
        格式化的错误信息
    """
    fields_str = ", ".join(missing_fields)
    return f"缺少必需字段: {fields_str}"


def format_auto_bind_skip_reason(
    collection_name: str,
    node_id: str,
    data_id: str,
    reason: str
) -> str:
    """
    格式化自动绑定跳过原因（中文）
    
    Args:
        collection_name: "local" 或 "remote"
        node_id: 节点 ID
        data_id: 数据 ID
        reason: 跳过原因
    
    Returns:
        格式化的原因说明
    """
    collection_cn = "本地" if collection_name == "local" else "远程"
    return f"自动绑定跳过 ({collection_cn}节点 node_id={node_id}, data_id={data_id}): {reason}"


def format_create_failed_error(
    collection_name: str,
    node_id: str,
    data_id: str,
    error: str
) -> str:
    """
    格式化创建失败错误（中文）
    
    Args:
        collection_name: "local" 或 "remote"
        node_id: 节点 ID
        data_id: 数据 ID
        error: 错误详情
    
    Returns:
        格式化的错误信息
    """
    collection_cn = "本地" if collection_name == "local" else "远程"
    return f"创建失败 (从{collection_cn}节点 node_id={node_id}, data_id={data_id}): {error}"


def format_update_failed_error(
    collection_name: str,
    node_id: str,
    data_id: str,
    error: str
) -> str:
    """
    格式化更新失败错误（中文）
    
    Args:
        collection_name: "local" 或 "remote"
        node_id: 节点 ID
        data_id: 数据 ID
        error: 错误详情
    
    Returns:
        格式化的错误信息
    """
    collection_cn = "本地" if collection_name == "local" else "远程"
    return f"更新失败 (从{collection_cn}节点 node_id={node_id}, data_id={data_id}): {error}"
