#!/usr/bin/env python3
from __future__ import annotations

import argparse
import json
import re
from pathlib import Path


ROOT = Path(__file__).resolve().parents[1]
CONJ_RE = re.compile(r"(그리고|및|와|과|또는|/|,)")
MULTI_CONDITION_RE = re.compile(r".*(그리고|및|와|과|또는).*(그리고|및|와|과|또는).*")


def main() -> int:
    ap = argparse.ArgumentParser()
    ap.add_argument("--report", default=str(ROOT / "Temp" / "operational_report.json"))
    args = ap.parse_args()

    report_path = Path(args.report)
    raw = report_path.read_text(encoding="utf-8")
    try:
        payload = json.loads(raw)
        sections = payload.get("sections") if isinstance(payload, dict) else []
        text = "\n".join(str(s.get("markdown") or "") for s in sections if isinstance(s, dict))
    except Exception:
        text = raw

    order_section = next((s for s in (payload.get("sections") if isinstance(payload, dict) else []) if isinstance(s, dict) and s.get("name") == "sell_priority_decision_table"), {}) if 'payload' in locals() else {}
    order_text = str(order_section.get("markdown") or text)

    multi_condition_count = sum(1 for line in order_text.splitlines() if MULTI_CONDITION_RE.search(line))
    tick_normalized = "tick" in text.lower() or "호가단위" in text or "KRX" in text
    sell_candidate_count = len(re.findall(r"\bSELL\b|\bTRIM\b|매도", order_text))

    result = {
        "formula_id": "ORDER_GRAMMAR_V1",
        "multi_condition_order_sentence_count": multi_condition_count,
        "tick_normalization_ok": tick_normalized,
        "sell_candidate_count": sell_candidate_count,
        "gate": "PASS" if multi_condition_count == 0 and tick_normalized else "FAIL",
    }
    print(json.dumps(result, ensure_ascii=False, indent=2))
    return 0 if result["gate"] == "PASS" else 1


if __name__ == "__main__":
    raise SystemExit(main())
