#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""从 eMAG 收货单 XLSX 生成 listing 目录骨架。
用法: python3 build_batch.py <reception.xlsx> [--pdf-prices]
输出: listing/<part_number>/index.md  +  listing/_data/batches/<date>_reception_<id>.md
"""
import sys, os, datetime
import openpyxl

WS = "/home/admin/.openclaw/workspace/listing"
RESTOCK = {"MOWO-MBCD-DR06", "MOWO-CH-X9"}  # 老品补货，不建新 listing

# 收货单 PDF 中的单价(Preț unitar, = sale_price 实收不含税)，按 part_number 映射
PDF_PRICE = {
    "MOWO-CH-SF3500": 496.00, "MOWO-CH-SF3500P": 596.00, "MOWO-MBCD-M054": 396.00,
    "MOWO-CH-X9": 322.30, "MOWO-AM-LC011": 326.00, "MOWO-MBCD-FZ620": 496.00,
    "MOWO-MBCD-M091": 356.00, "MOWO-AM-MG205": 296.00, "MOWO-MPM-2606P": 196.00,
    "MOWO-MPM-2606G": 196.00, "MOWO-BOL-D03": 316.00, "MOWO-MPM-618P": 316.00,
    "MOWO-MPM-618B": 316.00, "MOWO-BOL-015M": 126.00, "MOWO-BOL-028K": 166.00,
    "MOWO-BOL-1772B": 176.00, "MOWO-BOL-1766W": 176.00, "MOWO-BOL-015L": 126.00,
    "MOWO-MPM-A2": 156.00, "MOWO-BOL-1766B": 196.00, "MOWO-OI-G105P": 196.00,
    "MOWO-MBCD-DR06": 380.30,
}

def main():
    xlsx = sys.argv[1]
    wb = openpyxl.load_workbook(xlsx, data_only=True)
    ws = wb["Reception lines"]
    rows = list(ws.iter_rows(values_only=True))
    rec_id = None
    out = []
    for r in rows:
        if r[6] is None or r[6] == "产品代码" or not str(r[6]).startswith("MOWO-"):
            continue
        if rec_id is None:
            rec_id = r[0]
        out.append(r)
    new = [r for r in out if r[6] not in RESTOCK]
    restock = [r for r in out if r[6] in RESTOCK]

    batch_date = datetime.date.today().isoformat()
    batch_dir = f"{WS}/_data/batches"
    os.makedirs(batch_dir, exist_ok=True)

    tmpl = open(f"{WS}/_templates/SKU_TEMPLATE.md", encoding="utf-8").read()

    lines = []
    for r in new:
        (rid, line_id, name, cat, brand, pnk, pn, ext_id, ean,
         mfr, mfr_a, mfr_e, imp, imp_a, imp_e, cert, qty, ptype,
         *rest) = r
        L, W, H, Wt = rest[5], rest[6], rest[7], rest[8]
        price = PDF_PRICE.get(pn, "")
        d = f"{WS}/{pn}"
        os.makedirs(d, exist_ok=True)
        body = tmpl
        repl = {
            "{SKU_ID}": str(pn),
            "# 产品名（内部）: ": f"# 产品名（内部）: {name}  |  EAN: {ean}",
            "- 品牌:": f"- 品牌: {brand}",
            "- 型号:": f"- 型号: {pn}（PNK: {pnk} / ext_id: {ext_id}）",
            "- 类目（eMAG 叶子类目）:": f"- 类目（eMAG 叶子类目）: {cat}",
            "- 配件清单:": "- 配件清单: ",
            "- 包装尺寸/重量:": f"- 包装尺寸/重量: {L}×{W}×{H} cm, {Wt} kg",
            "- 定价(RON):": f"- 定价(RON): {price}（收货单单价，待确认口径）",
            "# 状态: draft | claude_drafted | reviewed | live": "# 状态: draft（收货 2026-10-06 / 收货单 275032）",
            "## 1. 产品基础信息（原始资料，从供应商/表格粘贴）":
                f"## 1. 产品基础信息\n> 收货单自动填充：reception_id={rid}, line_id={line_id}, 数量={qty}\n"
                f"> GPSR: 制造商={mfr} / {mfr_e}\n> EU责任人(进口商)={imp} / {imp_e}\n"
                f"> 合规声明(has_conformity_certificate)={cert}",
        }
        for k, v in repl.items():
            body = body.replace(k, v)
        open(f"{d}/index.md", "w", encoding="utf-8").write(body)
        lines.append((pn, name, cat, qty, price))

    # batch summary
    with open(f"{batch_dir}/{batch_date}_reception_{rec_id}.md", "w", encoding="utf-8") as f:
        f.write(f"# 收货批次 {rec_id} — {batch_date}\n\n")
        f.write("来源: 收货单 PDF 230195 / Aviz 275032, 到货 2026-10-06\n")
        f.write("总 100 pcs / 31,334.40 RON\n\n")
        f.write("## 新品（需建 listing）\n")
        for i, (pn, name, cat, qty, price) in enumerate(lines, 1):
            f.write(f"{i}. `{pn}` — {name} | {cat} | qty {qty} | 单价 {price}\n")
        f.write("\n## 老品补货（无需新 listing）\n")
        for r in restock:
            f.write(f"- `{r[6]}` — {r[2]} | qty {r[16]}\n")

    print(f"生成 {len(lines)} 个新品目录 (restock {len(restock)})")

if __name__ == "__main__":
    main()
