# -*- coding: utf-8 -*-
r"""guard_no_inline.py — 로봇 HTML 곁다리코드 차단 훅 [CEO 2026-07-19]
로봇 엔진 본체(class Component) 수정은 허용하되, HTML 본문에 '새 인라인 <script> 블록'을
추가하는 것(=부수 기능을 본문에 쑤셔넣는 것)을 막는다. 새 기능은 dzw_*.js 블록 + <script src>로.
원리: src 없는 인라인 <script> 태그 개수가 기준선(9)을 넘으면 커밋 차단.
git pre-commit 훅에서 호출. 통과=exit0, 차단=exit1.
"""
import io, re, sys, os

HTML = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'DOZIKWORKS_OS_v5_locked.dc.html')
BASELINE = 9   # 2026-07-19 측량 기준. 로봇 엔진 심장부(1034~4239) 외 인라인 스크립트는 이 이하로.

def count_inline(path):
    s = io.open(path, encoding='utf-8', errors='ignore').read()
    return len(re.findall(r'<script(?![^>]*\bsrc=)[^>]*>', s))

if __name__ == '__main__':
    if not os.path.exists(HTML):
        sys.exit(0)
    n = count_inline(HTML)
    if n > BASELINE:
        sys.stderr.write(
            '\n[곁다리코드 차단] 로봇 HTML에 새 인라인 <script>가 늘었습니다 (%d개 > 기준 %d개).\n'
            '  → 부수 기능은 본문에 넣지 말고 dzw_기능명.js 파일로 만들어 <script src>로 얹으세요.\n'
            '  → 로봇 엔진 본체(class Component) 안의 수정은 새 <script>를 안 만드니 그대로 허용됩니다.\n'
            '  (정당한 사유로 정말 필요하면 guard_no_inline.py의 BASELINE을 올리고 사유를 커밋에 기록)\n\n' % (n, BASELINE))
        sys.exit(1)
    sys.exit(0)
