"""通用工具函数集合。

注：common/ 不是 Django app（无 apps.py、未注册到 INSTALLED_APPS），
仅作为跨 app 的纯函数 utility 命名空间使用。

不要在此放 Django Model / Manager / 任何依赖 app registry 的对象。
"""


def mask_token(token: str, visible_tail: int = 4, mask_char: str = '*') -> str:
    """脱敏长 token / secret，仅保留末 N 位明文。

    设计动机：CredentialSlot.access_token 在 Admin 列表 / 查看态需仅显示末 4 位；
    Phase 3 阿里云日志 formatter 也将复用本函数。

    Args:
        token: 待脱敏字符串；空字符串 / None 直接返回 ''
        visible_tail: 末尾保留明文的字符数（默认 4）
        mask_char: 掩码字符（默认 *）

    Returns:
        脱敏后的字符串。例：
            'sk-abcdef1234' -> '*********1234'
            ''              -> ''
            None            -> ''
            'abc'           -> '***'   # 短于 visible_tail 时全部脱敏，不暴露长度信号
    """
    if not token:
        return ''
    if len(token) <= visible_tail:
        return mask_char * len(token)
    return mask_char * (len(token) - visible_tail) + token[-visible_tail:]
