ius: 16px; padding: 40px 32px; max-width: 400px; text-align: center; box-shadow: 0 10px 30px rgba(0,0,0,0.3); }}
h1 {{ color: #34d399; margin: 0 0 16px 0; font-size: 24px; }}
p {{ color: #94a3b8; margin: 8px 0; line-height: 1.6; }}
.ico {{ font-size: 56px; margin-bottom: 16px; }}
</style>
</head>
<body>
<div class="card">
<div class="ico">✅</div>
<h1>扫码成功</h1>
<p>请在刚才打开登录页的浏览器中</p>
<p>点击 <strong style="color:#60a5fa">「确认登录」</strong> 按钮完成登录</p>
<p style="margin-top:24px;font-size:13px;color:#64748b">本页可关闭</p>
</div>
</body>
</html>"""
            return HTMLResponse(content=html, status_code=200)

        # POST 模式:返回 JSON
        return success_response(data={
            "success": result["success"],
            "message": result["message"],
        })

    except ValueError as ve:
        # 票据过期/不存在 → 业务错误
        logger.warning(f"扫码业务错误: {ve}")
        raise AppException(1003, str(ve))
    except Exception as e:
        logger.error(f"扫码处理异常: error={e}", exc_info=True)
        raise AppException(1005, f"扫码处理失败: {str(e)}")


# --------------------------------------------------------------------------
# POST /api/auth_qrcode/confirm — 当前已登录坐席确认授权
# --------------------------------------------------------------------------
@router.post("/confirm", response_model=None)
async def confirm_qrcode(
    body: QrcodeConfirmRequest,
    current_user: UserInfo = Depends(get_current_user),
    redis_client: aioredis.Redis = Depends(dep_redis),
):
    """处理当前已登录坐席的扫码确认授权。

    需要鉴权: 只有已登录的坐席/管理员能确认授权。
    把扫码用户身份变成可登录 Token(roles=['agent']),
    写 Redis confirm:{ticket},前端 poll 拿到后跳坐席主页。

    otp_code: admin 场景下可选,Phase 1.1 仅记录日志,
              真实 OTP 校验留给 Phase 2.1(参考 agents.py:272-274 的 totp.verify)。

    Args:
        body: 包含 ticket 和 otp_code(可选)
        current_user: 当前已登录用户(由 get_current_user 注入)
        redis_client: Redis 客户端

    Returns:
        Dict: 统一响应格式,data 字段是 QrcodeConfirmResponse
    """
    try:
        service = _get_qrcode_service(redis_client)
        result = await service.process_confirm(
            ticket=body.ticket,
            current_user_id=current_user.employee_id,
            current_user_name=current_user.name,
            current_roles=current_user.roles,
            otp_code=body.otp_code,
        )

        return success_response(data={
            "token": result["token"],
            "employee_id": result["employee_id"],
            "name": result["name"],
            "roles": result["roles"],
            "require_otp": result.get("require_otp"),
        })

   