#!/usr/bin/env python3
"""Validate the three-version front-office sales training pack."""

from __future__ import annotations

import argparse
import csv
import json
from pathlib import Path

from openpyxl import load_workbook


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("--root", type=Path, required=True)
    args = parser.parse_args()
    root = args.root
    expected_dirs = ["00-培训总览", "01-智能结算基础版", "02-营养结算标准版", "03-营养健康专业版", "04-内部映射"]
    actual_dirs = [p.name for p in sorted(root.iterdir()) if p.is_dir()]
    if actual_dirs != expected_dirs:
        raise SystemExit(f"unexpected directories: {actual_dirs}")
    workbook = root / "00-培训总览/智慧食堂前厅三版本归档与硬件选型.xlsx"
    wb = load_workbook(workbook, data_only=True)
    expected_sheets = ["01-三版本总览", "02-12SKU归档", "03-版本功能差异", "04-硬件对照", "05-销售升级话术", "06-三版本客户买点", "07-12SKU场景买点"]
    if wb.sheetnames != expected_sheets:
        raise SystemExit(f"unexpected sheets: {wb.sheetnames}")
    if [wb["01-三版本总览"].cell(r, 7).value for r in range(5, 8)] != [6, 5, 1]:
        raise SystemExit("version archive count mismatch")
    if wb["03-版本功能差异"].max_row != 24 or wb["04-硬件对照"].max_row != 31 or wb["05-销售升级话术"].max_row != 16:
        raise SystemExit("training table row count mismatch")
    if wb["06-三版本客户买点"].max_row != 7 or wb["07-12SKU场景买点"].max_row != 16:
        raise SystemExit("scenario and buying-point row count mismatch")
    mapping = root / "04-内部映射/12个业务SKU归档到3个销售版本.csv"
    with mapping.open(encoding="utf-8-sig") as file:
        rows = list(csv.DictReader(file))
    if len(rows) != 12 or len({row["code"] for row in rows}) != 12:
        raise SystemExit("12-SKU mapping mismatch")
    for sequence, name in (("01", "智能结算基础版"), ("02", "营养结算标准版"), ("03", "营养健康专业版")):
        folder = root / f"{sequence}-{name}"
        version_workbook = folder / f"{name}_产品与硬件培训.xlsx"
        if not version_workbook.exists():
            raise SystemExit(f"missing workbook: {name}")
        version_wb = load_workbook(version_workbook)
        if version_wb["版本速查"].max_row < 22:
            raise SystemExit(f"customer scenario analysis missing: {name}")
        if not (folder / f"{name}_销售培训速查卡.html").exists():
            raise SystemExit(f"missing HTML: {name}")
    print(json.dumps({"status":"PASS","versions":3,"source_skus":12,"archive_split":[6,5,1],"feature_rows":20,"hardware_rows":27,"talk_rows":12,"version_customer_rows":3,"sku_customer_rows":12}, ensure_ascii=False))


if __name__ == "__main__":
    main()
