#!/usr/bin/env python3
from pathlib import Path
import json,re
root=Path(__file__).resolve().parents[1];text=(root/'script/script_goosebumps.txt').read_text();low=text.lower()
def any_of(*xs):return any(x.lower() in low for x in xs)
def ctx(names,claims,r=800):
 ps=[low.find(n.lower()) for n in names if low.find(n.lower())>=0];return any(any(c.lower() in low[max(0,p-r):p+r] for c in claims) for p in ps)
g={
'piloerection':any_of('nổi da gà','piloerection','goosebumps'),
'arrector_pili':any_of('cơ dựng lông','arrector pili') and any_of('nang lông','chân lông'),
'autonomic':any_of('hệ thần kinh tự chủ','thần kinh tự động') and any_of('giao cảm','sympathetic'),
'involuntary':any_of('không tự chủ','không theo ý muốn','không thể ra lệnh','không chủ động điều khiển','ngoài ý muốn','không tự nguyện','không cần xin phép ý thức'),
'cold_insulation':any_of('giữ lớp khí','lớp không khí','cách nhiệt') and any_of('động vật nhiều lông','bộ lông dày','động vật có lớp lông dày') and any_of('ở người','con người','người hiện đại') and any_of('hạn chế','ít hiệu quả','không đáng kể','lông thưa và ngắn','không tạo ra chiếc chăn không khí đáng kể'),
'threat_caveat':any_of('trông lớn hơn','phồng bộ lông') and any_of('không phải mọi','không có nghĩa mọi','không đồng nghĩa'),
'frisson_distinction':any_of('frisson','rùng mình vì cảm xúc','emotional chills') and any_of('không đồng nhất','không phải ai','không luôn luôn') and any_of('nổi da gà','goosebumps'),
'emotional_triggers':all(any_of(*x) for x in [('cao trào','crescendo'),('bất ngờ','vi phạm dự đoán','prediction'),('ký ức','ý nghĩa cá nhân'),('choáng ngợp','awe')]),
'no_single_mechanism':any_of('không có một cơ chế duy nhất','chưa có một cơ chế duy nhất','không phải một hóa chất','không có hóa chất nổi da gà','không chứng minh có một “hóa chất nổi da gà” duy nhất','không chứng minh có một "hóa chất nổi da gà" duy nhất'),
'practical':any_of('làm ấm','ấm lên') and any_of('quần áo ướt','lau khô','thay đồ khô','thay quần áo ướt') and any_of('không cần kìm','không cần ngăn','không cần dập tắt','không cần cố đè nén'),
'not_personality_test':any_of('không phải thước đo','không dùng để đánh giá','hữu ích hơn gán phản ứng','không phải máy phát hiện') and any_of('tính cách','đồng cảm','nhân cách','kiểu tính cách'),
'fever_boundary':any_of('sốt','fever') and any_of('rét run','rigor') and any_of('không giống','khác với','không đồng nhất'),
'safety':any_of('khó thở','thở khó') and any_of('ngất','lú lẫn') and any_of('một bên','yếu liệt','triệu chứng thần kinh') and any_of('đánh giá chuyên môn','đánh giá y tế','cấp cứu','nhân viên y tế','chuyên gia y tế'),
'no_self_diagnosis':any_of('không tự chẩn đoán','đừng tự chẩn đoán') and any_of('lo âu','thần kinh'),
'closing':any_of('bộ máy tự chủ','hệ thần kinh tự chủ') and any_of('nhiệt độ') and any_of('quan trọng','ý nghĩa'),
}
s={'Darwin':ctx(('charles darwin','darwin'),('dựng lông','piloerection','biểu hiện cảm xúc','động vật')),'Panksepp':ctx(('jaak panksepp','panksepp'),('âm nhạc','music','chills','rùng mình')),'Blood/Zatorre':ctx(('anne blood','robert zatorre','blood và zatorre'),('pet','phần thưởng','reward','âm nhạc dễ chịu'))}
f={x:bool(re.search(rf'(?<![\wÀ-ỹ]){x}(?![\wÀ-ỹ])',low)) for x in ['tôi','chúng ta','chúng tôi']};ok=all(g.values()) and all(s.values()) and not any(f.values());print(json.dumps({'groups':g,'sources':s,'forbidden':f,'status':'PASS' if ok else 'FAIL'},ensure_ascii=False));raise SystemExit(0 if ok else 1)
