# -*- coding: utf-8 -*-
"""
设计师在线状态 - 请求外部查询服务（转人工时按需调用）

接口: GET /online 返回 {online_users: ["lz", "ZuoWei"], ...}
本端用 online_users 同步本地 designer_online 表后派单。
"""
import os
import logging
from typing import List, Set

logger = logging.getLogger(__name__)

# 设计师在线查询服务，.env 配置 DESIGNER_ROSTER_API，如 http://huichang.online:8001/online
_API_URL = os.getenv("DESIGNER_ROSTER_API", "")


async def _fetch_online_users() -> Set[str]:
    """请求 GET /online，返回当前在线用户的 user_id 集合"""
    if not _API_URL:
        return set()
    try:
        import httpx
        async with httpx.AsyncClient(timeout=10) as client:
            r = await client.get(_API_URL)
            r.raise_for_status()
            data = r.json()
            users = data.get("online_users", [])
            return set(users) if isinstance(users, list) else set()
    except Exception as e:
        logger.debug(f"设计师在线查询失败: {e}")
        return set()


async def poll_and_update_roster() -> None:
    """请求查询服务，同步在线状态到本地数据库"""
    from db.designer_roster_db import update_online, get_all_wechat_user_ids
    online_users = await _fetch_online_users()
    all_ids = get_all_wechat_user_ids()
    for uid in all_ids:
        update_online(uid, uid in online_users)
