"""
测试 sif headers 服务的流程
启动服务后跑这个文件，逐步看 idx / headers 切换是否正常
"""
import time
import requests

BASE = 'http://127.0.0.1:10248'


def call(invalid=False, label=''):
    url = f'{BASE}/sif/api/headers'
    params = {'invalid': 'true'} if invalid else {}
    t1 = time.time()
    resp = requests.get(url, params=params, timeout=30).json()
    cost = round(time.time() - t1, 2)
    print(f'\n=== {label} (invalid={invalid}) | 耗时 {cost}s ===')
    print(f'code={resp.get("code")}  message={resp.get("message")}')
    headers = resp.get('headers') or {}
    auth = headers.get('authorization', '')
    print(f'authorization 末尾20字符: ...{auth[-20:] if auth else "(空)"}')
    return resp


if __name__ == '__main__':
    # 1. 首次调用 → 应该登录账号 A（idx=0）
    call(invalid=False, label='Step1 首次取 headers')

    # 2. 再调一次 → 应直接返回缓存（耗时应极短，token 末尾相同）
    call(invalid=False, label='Step2 再取一次（应命中缓存）')

    # 3. 模拟 A 挂了 → 应切到 B（idx=1），token 应变
    call(invalid=True, label='Step3 A 失效，切下一个（B）')

    # 4. 再取 → 应命中 B 的缓存（token 跟 Step3 相同）
    call(invalid=False, label='Step4 再取（应是 B 的缓存）')

    # 5. 模拟 B 挂了 → 应切回 A，token 又变新
    call(invalid=True, label='Step5 B 失效，切回 A')

    # 6. 兼容老路由
    print('\n=== Step6 旧路由 /sif/api/login?regetFlag=true 兼容性 ===')
    resp = requests.get(f'{BASE}/sif/api/login', params={'regetFlag': 'true'}, timeout=30).json()
    print(f'code={resp.get("code")}  authorization末尾: ...{(resp.get("headers") or {}).get("authorization", "")[-20:]}')
