#!/usr/bin/env python3
"""
ecologic_membership_query.py —— 通过 Playwright 在 Ecologic 门户查询 Membership code。

用法:
  python ecologic_membership_query.py <营业执照号>            # 静默模式，仅输出 JSON
  python ecologic_membership_query.py <营业执照号> --debug    # 调试模式，打印步骤信息到 stderr
  python ecologic_membership_query.py --headless <营业执照号> # 无头模式（默认有头）

返回 JSON:
  {"success": true, "membership_code": "A6967"}
  {"success": false, "error": "未找到匹配的 Membership code"}
"""

import sys
import json
from playwright.sync_api import sync_playwright

PORTAL_URL = "https://producteur.ecologic-extranet.com/compte-manager"
EMAIL = "info@seamew.de"
PASSWORD = "Meiouwang1332!"
TIMEOUT = 30000  # ms


def log_debug(msg: str):
    """打印调试信息到 stderr，避免污染 stdout 的 JSON 输出。"""
    print(msg, file=sys.stderr, flush=True)


def query_membership_code(ct_reg_number: str, debug: bool = False, headless: bool = False) -> dict:
    """通过营业执照号查询 Membership code。

    :param ct_reg_number: 营业执照号，如 91440300MA5F7RXH08
    :param debug: 是否打印调试信息到 stderr
    :param headless: 是否无头模式
    :returns: {"success": bool, "membership_code": str|None, "error": str|None}
    """
    if not ct_reg_number:
        return {"success": False, "error": "营业执照号为空"}

    with sync_playwright() as p:
        if debug:
            log_debug(f"[步骤1] 正在启动浏览器 (headless={headless})...")
        browser = p.chromium.launch(headless=headless)
        context = browser.new_context()
        page = context.new_page()

        try:
            # ── 1. 登录（若检测到已登录状态则跳过）──
            if debug:
                log_debug(f"[步骤2] 正在访问门户网站: {PORTAL_URL}")
            page.goto(PORTAL_URL, wait_until="domcontentloaded", timeout=120000)

            # 判断是否已登录：URL 已处于账户页面（consulter-compte），或页面中没有登录表单（#email）
            already_logged_in = "/consulter-compte/" in page.url or page.locator("#email").count() == 0
            if already_logged_in:
                if debug:
                    log_debug("[步骤2] 检测到已登录状态，跳过登录表单，直接进入第二步")
            else:
                if debug:
                    log_debug("[步骤2] 页面加载完成，正在填写登录表单...")
                page.fill("#email", EMAIL)
                page.fill("#password", PASSWORD)
                if debug:
                    log_debug("[步骤2] 正在点击登录按钮...")
                page.click("input[type='submit']")
                if debug:
                    log_debug("[步骤2] 等待登录完成，跳转到账户页面...")
                page.wait_for_url("**/consulter-compte/**", timeout=TIMEOUT)
                if debug:
                    log_debug("[步骤2] 登录成功！")

            # ── 2. 进入 My producers ──
            if debug:
                log_debug("[步骤3] 正在点击 'My producers' 链接...")
            page.get_by_role("link", name="Mes producteurs").click()
            # 参照 uin_page.py: 用 networkidle 等待 DataTables 初始化完成
            page.wait_for_load_state("networkidle")
            page.wait_for_timeout(2000)
            if debug:
                log_debug("[步骤3] 表格加载完成！")

            # ── 3. 搜索营业执照号（参照 uin_page.py 的搜索方式）──
            if debug:
                log_debug(f"[步骤4] 正在搜索营业执照号: {ct_reg_number}")
            # 使用简单选择器，与 uin_page.py 一致
            page.locator("input[type='search']").fill(ct_reg_number)
            page.keyboard.press("Enter")
            page.wait_for_load_state("networkidle")
            page.wait_for_timeout(2000)
            if debug:
                log_debug("[步骤4] 搜索完成，等待结果过滤...")

            # ── 4. 查找匹配行（列0: Membership code, 列2: 营业执照号）──
            if debug:
                log_debug("[步骤5] 正在遍历表格匹配营业执照号...")
            # 参照 uin_page.py: 用 table tbody tr
            rows = page.locator("table tbody tr")
            row_count = rows.count()
            if debug:
                log_debug(f"[步骤5] 表格共 {row_count} 行，开始遍历...")

            for i in range(row_count):
                cells = rows.nth(i).locator("td")
                cell_count = cells.count()

                if cell_count < 3:
                    continue

                reg_text = cells.nth(2).text_content().strip()
                if debug:
                    log_debug(f"[步骤5] 第{i}行 营业执照号: {reg_text}")
                if reg_text == ct_reg_number:
                    member_code = cells.nth(0).text_content().strip()
                    if debug:
                        log_debug(f"[步骤5] 匹配成功！Membership code: {member_code}")
                    browser.close()
                    return {
                        "success": True,
                        "membership_code": member_code,
                    }

            if debug:
                log_debug("[步骤5] 遍历完成，未找到匹配行")
            browser.close()
            return {
                "success": False,
                "error": "搜索结果中未找到匹配营业执照号的行",
            }

        except Exception as e:
            if debug:
                log_debug(f"[错误] 发生异常: {e}")
            browser.close()
            return {"success": False, "error": str(e)}


if __name__ == "__main__":
    args = [a for a in sys.argv[1:] if not a.startswith("--")]
    flags = [a for a in sys.argv[1:] if a.startswith("--")]

    debug = "--debug" in flags
    headless = "--headless" in flags

    if len(args) < 1:
        print(json.dumps({"success": False, "error": "缺少营业执照号参数"}))
        sys.exit(1)

    result = query_membership_code(args[0], debug=debug, headless=headless)
    print(json.dumps(result, ensure_ascii=False))
    sys.exit(0 if result["success"] else 1)
