"""LEKO 下号（UIN）API 流程 RPA · step1 取任务（API 流程专用）。

与 source 流程 `rpa_leko_step1_get.py` 对应：
- source 流程：直连 source 库认领 `EPRRegInfo.PushTaxBureauStatus=3` 的记录；
- API 流程：没有 source 库记录，改调本服务取数接口 `POST /api/epr/leko-rpa/claim`
  （只返回 API 流程注册成功的数据：`data_source='api'` 且 `status=2`），
  两套队列零交集、互不影响。

自包含约束：OctopusRPA 中跨文件 import 会报 ModuleNotFoundError，
本文件禁止 import 其它 rpa 脚本（与 source 流程脚本同一约定）。
"""

import json

import requests

# ===== 部署常量（按环境修改）=====
FR_EPR_RPA_BASE_URL = 'http://automation.usaeu.com:8888/fr_epr_reg'
CLAIM_PATH = '/api/epr/leko-rpa/claim'
REQUEST_TIMEOUT_SECONDS = 30


def claim_one_task(base_url: str = FR_EPR_RPA_BASE_URL) -> dict | None:
    """认领一条下号任务（API 流程注册成功的公司）。

    返回:
        dict | None: 任务载荷（task_id / BusinessSerialNumber / NameEng /
        xlsx{key,name,signed_url} / pdf{key,name,signed_url} / bizParam），
        无待办任务时返回 None。

    Raises:
        RuntimeError: 接口返回非 200 code（消息为服务端英文 msg）。
    """
    url = base_url.rstrip('/') + CLAIM_PATH

    response = requests.post(url, timeout=REQUEST_TIMEOUT_SECONDS)
    body = json.loads(response.text) if response.text else {}

    if response.status_code != 200 or body.get('code') != 200:
        raise RuntimeError(
            f"认领下号任务失败: HTTP {response.status_code} code={body.get('code')} msg={body.get('msg')}"
        )

    data = body.get('data')
    if data is None:
        print('没有待处理的下号任务（API 流程）')
        return None

    print(
        '认领到下号任务: task_id={task_id} BSN={bsn} NameEng={name} attempts={attempts}'.format(
            task_id=data.get('task_id'),
            bsn=data.get('BusinessSerialNumber'),
            name=data.get('NameEng'),
            attempts=data.get('attempts'),
        )
    )
    return data


if __name__ == '__main__':
    # 本地自测：直接打印认领结果（签名 URL 有效期默认 10 分钟）
    print(json.dumps(claim_one_task(), ensure_ascii=False, indent=2))
