#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""不发网：验证信封解包、词包截断、双维度判定。"""
from __future__ import annotations

import sys
from pathlib import Path

SCRIPTS = Path(__file__).resolve().parent
if str(SCRIPTS) not in sys.path:
    sys.path.insert(0, str(SCRIPTS))

from cli_json import dual_verdict, parse_json_text, short_label, unwrap_page, zh
from summarize import advice_of, dim_layer_text, fmt_share, pct_pair, setting_line


def test_unwrap_metrics_uses_data_data():
    env = {"ok": True, "data": {"data": [{"spend_usd": 1}], "total": 1808, "result": None}}
    rows, total = unwrap_page(env)
    assert len(rows) == 1 and total == 1808


def test_unwrap_list_uses_result():
    env = {"ok": True, "data": {"result": [{"id": 1258, "name": "x"}], "total": 1}}
    rows, total = unwrap_page(env)
    assert rows[0]["id"] == 1258 and total == 1


def test_unwrap_project_list_is_array():
    env = {"ok": True, "data": [{"projectName": "A"}]}
    rows, total = unwrap_page(env)
    assert total == 1 and rows[0]["projectName"] == "A"


def test_parse_array_not_first_object():
    raw = '[{"spend_usd": 10}, {"spend_usd": 20}]'
    parsed = parse_json_text(raw)
    assert isinstance(parsed, list) and len(parsed) == 2


def test_short_label_truncates_keyword_pack():
    pack = "3d,a3,battle camp," + ",".join(["genshin"] * 80)
    out = short_label(pack)
    assert "genshin" in out or "3d" in out
    assert len(out) < 80
    assert pack not in out


def test_dual_verdict_table():
    assert dual_verdict(True, "变好") == "有效"
    assert dual_verdict(False, "变好") == "待观察（潜力）"
    assert dual_verdict(False, "稳定") == "无效"
    assert dual_verdict(True, "无法对比") == "有效"


def test_share_uses_arrow():
    assert pct_pair(50, 55) == "50.0% → 55.0%"
    out = fmt_share({"应用推广": 100}, {"应用推广": 100})
    assert ">>" not in out
    assert "100.0% → 100.0%" in out


def test_setting_and_learning_are_multiline():
    text = setting_line("【国家】", {"美国"}, {"越南"})
    assert "\n" in text and text.startswith("【国家】")
    items = [
        {"label": f"广告{i}", "spend": 80, "imps": 10000, "cpm": 8.0} for i in range(12)
    ]
    body, _hit, _hs, _ts = dim_layer_text("广告", items, [])
    assert body.startswith("广告")
    assert body.count("· 新增") == 8
    assert "另有 4 个过门槛新增未展开" in body
    assert "{" not in body
    assert advice_of("有效") == "建议：继续执行"


def test_zh_web_conversions():
    assert zh("WEB_CONVERSIONS") == "网站转化"
    assert zh("CUSTOM&LOOKALIKE") == "自定义/相似受众"


if __name__ == "__main__":
    tests = [
        test_unwrap_metrics_uses_data_data,
        test_unwrap_list_uses_result,
        test_unwrap_project_list_is_array,
        test_parse_array_not_first_object,
        test_short_label_truncates_keyword_pack,
        test_dual_verdict_table,
        test_share_uses_arrow,
        test_setting_and_learning_are_multiline,
        test_zh_web_conversions,
    ]
    for fn in tests:
        fn()
        print("ok", fn.__name__)
    print("DONE")
