from cli.tui.copy.fragments import (
    APP_BINDING_LABELS,
    GENERAL_COPY,
    INTERNAL_BINDING_LABELS,
    NAVIGATION_DESCRIPTIONS,
    STATUS_LABELS,
    VIEW_LABELS,
)


class TuiNavigationCopyMixin:
    """
    TUI 导航与基础标签文案混入。
    """

    @staticmethod
    def render_view_label(view_key: str) -> str:
        """
        将内部视图标识转换为中文显示名称。

        :param view_key: 视图标识
        :return: 中文视图名称
        """
        normalized_view = str(view_key).strip().lower()
        return VIEW_LABELS.get(normalized_view, view_key)

    @staticmethod
    def render_status_label(status: str, fallback: str = '信息') -> str:
        """
        将状态值转换为中文显示文本。

        :param status: 原始状态值
        :param fallback: 缺失时兜底文本
        :return: 中文状态文本
        """
        normalized_status = str(status).strip().lower()
        if not normalized_status:
            return fallback
        return STATUS_LABELS.get(normalized_status, str(status).strip().upper())

    @staticmethod
    def render_status_code(status: str) -> str:
        """
        将状态值转换为控制台风格状态码。

        :param status: 原始状态值
        :return: 状态码文本
        """
        normalized_status = str(status).strip().lower()
        status_code_mapping = {
            'ok': 'SYS.OK',
            'success': 'SYS.OK',
            'healthy': 'SYS.OK',
            'fail': 'SYS.FAIL',
            'error': 'SYS.FAIL',
            'down': 'SYS.FAIL',
            'warn': 'SYS.WARN',
            'warning': 'SYS.WARN',
            'degraded': 'SYS.WARN',
            'info': 'SYS.INFO',
        }
        return status_code_mapping.get(normalized_status, f'SYS.{normalized_status.upper() or "INFO"}')

    @staticmethod
    def render_navigation_description(view_key: str) -> str:
        """
        获取指定视图的导航说明。

        :param view_key: 视图标识
        :return: 导航说明
        """
        normalized_view = str(view_key).strip().lower()
        return NAVIGATION_DESCRIPTIONS.get(normalized_view, '')

    @staticmethod
    def build_tui_command_help() -> str:
        """
        构建 `shierfeng tui` 命令帮助文案。

        :return: 命令帮助文案
        """
        return GENERAL_COPY['tui_command_help']

    @staticmethod
    def build_missing_dependency_message() -> str:
        """
        构建 TUI 可选依赖缺失时的提示消息。

        :return: 缺依赖提示消息
        """
        return GENERAL_COPY['tui_missing_dependency_message']

    @staticmethod
    def build_missing_dependency_hint() -> str:
        """
        构建 TUI 可选依赖缺失时的恢复建议。

        :return: 恢复建议文案
        """
        return GENERAL_COPY['tui_missing_dependency_hint']

    @staticmethod
    def build_app_binding_label(binding_key: str) -> str:
        """
        根据绑定标识构建应用级快捷键标签文案。

        :param binding_key: 绑定标识
        :return: 快捷键标签文案
        """
        normalized_key = str(binding_key).strip().lower()
        return APP_BINDING_LABELS.get(normalized_key, normalized_key)

    @staticmethod
    def build_confirm_binding_label(binding_key: str) -> str:
        """
        根据确认弹窗绑定标识构建快捷键标签文案。

        :param binding_key: 绑定标识
        :return: 快捷键标签文案
        """
        normalized_key = str(binding_key).strip().lower()
        return INTERNAL_BINDING_LABELS.get(f'confirm_{normalized_key}', normalized_key)

    @staticmethod
    def build_internal_binding_label(binding_key: str) -> str:
        """
        根据内部交互绑定标识构建快捷键标签文案。

        :param binding_key: 绑定标识
        :return: 快捷键标签文案
        """
        normalized_key = str(binding_key).strip().lower()
        return INTERNAL_BINDING_LABELS.get(normalized_key, normalized_key)
