/* ui_lang.c —— `ui_lang()` 的判据。
 * ui_lang.c — criterion for `ui_lang()`.
 *
 * ## 判据
 * ## Criteria
 *
 * 1. `ui_lang(zh, en)` 选出来的那个，必须与 `ui_scr_get_language()` 说的语言**一致**；
 * 2. **形参顺序**是「中文在前、英文在后」—— 反了的话英文手机上会蹦中文（而中文手机上一切正常，
 *    所以只在一半设备上出问题，最容易漏）。
 *
 * 第 2 条用一个**不含语义**的取值（`"AAA"` / `"BBB"`）单独问一遍：这样"顺序反了"与
 * "语言取错了"能分开报，而不会互相掩盖。
 *
 * ⚠ 这是**纯 C 判据**：`ui_lang` 的参数与返回值都是 `const char*`，非 C 语言的字符串语义
 * 各不相同（本仓 E191 记过 Python 前端的字符串坑），那几门要各验各的。
 *
 * 跑法（桌面，秒级）：
 *     dotnet scripts/vmlcli/bin/Release/net10.0/vmlcli.dll third_party/vml/Examples/c/test/ui_lang.c
 */

#include <vml_ui.h>
#include <string.h>   /* strcmp —— ⚠ 比**内容**，不能比指针：两个内容相同的字面量地址不同 */

int fails = 0;

int main(void) {
    int lang;
    const char* got;
    const char* want;

    lang = ui_scr_get_language();
    printf("host lang = %d (0 = zh, 1 = en)\n", lang);

    /* ① 选出来的必须与宿主语言一致（这里拿"真文案"问）——
     * ⚠ 第一版写的是 `got == want`（比指针），于是**内容对、地址不同**，两条判据全假红
     *   （打印出来的明明是"选中 中文，应为 中文"）。比字符串一律走 `strcmp`。 */
    got = ui_lang("中文", "English");
    want = (lang == 0) ? "中文" : "English";
    if (strcmp(got, want) == 0) {
        printf("OK   选中 %s\n", got);
    } else {
        printf("FAIL 选中 %s，应为 %s\n", got, want);
        fails = fails + 1;
    }

    /* ② 形参顺序：用不含语义的取值单独问一遍（与①分开报，别互相掩盖） */
    got = ui_lang("AAA", "BBB");
    want = (lang == 0) ? "AAA" : "BBB";
    if (strcmp(got, want) == 0) {
        printf("OK   顺序对（zh 在前、en 在后）\n");
    } else {
        printf("FAIL 顺序反了：拿到 %s，应为 %s\n", got, want);
        fails = fails + 1;
    }

    printf("UI_LANG %s (fails=%d)\n", fails == 0 ? "PASS" : "FAIL", fails);
    return fails;
}
