from __future__ import annotations

import json
import re

from refactor_master_helpers import ROOT, collect_prompt_files, read_text


PRICE_RE = re.compile(r"\b\d{1,3}(?:,\d{3})+(?:\.\d+)?원\b")
PCT_RE = re.compile(r"\b\d+(?:\.\d+)?%")
LEAK_WORDS = ("계산", "산출", "조정", "약", "대략", "상황에 따라", "추정")
SAFE_PHRASES = ("산출한", "재산출", "재계산", "재해석", "그대로", "참조", "인용", "사용", "읽기", "출력", "결과값", "하네스")


def main() -> int:
    violations: list[dict[str, str]] = []
    for path in collect_prompt_files():
        text = read_text(path)
        for lineno, line in enumerate(text.splitlines(), start=1):
            if not (PRICE_RE.search(line) or PCT_RE.search(line) or any(word in line for word in LEAK_WORDS)):
                continue
            if "input JSON values" in line or "DATA_MISSING" in line:
                continue
            if line.lstrip().startswith("#"):
                continue
            if any(word in line for word in SAFE_PHRASES):
                continue
            if "금지" in line or "하지 말" in line or "절대" in line:
                continue
            if "LLM" not in line and "하네스" not in line:
                continue
            if "formula_id" in line or "공식_ID" in line:
                continue
            violations.append({"file": str(path.relative_to(ROOT)), "line": str(lineno), "text": line.strip()})

    result = {
        "formula_id": "PROMPT_FORMULA_LEAK_V1",
        "prompt_formula_leak_count": len(violations),
        "violations": violations[:200],
        "gate": "PASS" if not violations else "FAIL",
    }
    out = ROOT / "Temp" / "prompt_formula_leak_audit_v1.json"
    out.write_text(json.dumps(result, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(result, ensure_ascii=True, indent=2))
    return 0 if not violations else 1


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