#!/usr/bin/env python3
from pathlib import Path
import json,re
root=Path(__file__).resolve().parents[1];text=(root/'script/script_hiccups.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=900):
 ps=[]
 for n in names:
  st=0
  while True:
   i=low.find(n.lower(),st)
   if i<0:break
   ps.append(i);st=i+1
 return any(any(c.lower() in low[max(0,p-r):p+r] for c in claims) for p in ps)
g={
'definition':any_of('nấc cụt','singultus') and any_of('không tự chủ','ngoài ý muốn') and any_of('cơ hoành') and any_of('cơ hít vào','cơ hô hấp'),
'glottis':any_of('thanh môn','glottis') and any_of('đóng','khép') and any_of('tiếng hic','âm hic','tiếng “hic”'),
'afferent':any_of('dây phế vị','dây lang thang','vagus') and any_of('dây hoành','phrenic') and any_of('giao cảm','sympathetic') and any_of('hướng tâm','tín hiệu vào','đưa tín hiệu'),
'central_uncertain':any_of('thân não','brainstem') and any_of('tủy sống','spinal') and any_of('bộ tạo nhịp','bộ tạo mẫu','pattern generator','mạng trung tâm','mạng tạo mẫu','mạng lưới tạo mẫu') and any_of('chưa xác định hoàn toàn','chưa định vị hoàn toàn','chưa định vị dứt khoát','chưa được định vị dứt khoát','chưa được chốt','chưa hiểu hết'),
'efferent':any_of('ly tâm','tín hiệu ra','đầu ra') and any_of('dây hoành','phrenic') and any_of('thanh quản','laryngeal','thanh môn'),
'triggers':any_of('ăn nhanh') and any_of('căng dạ dày','dạ dày căng','ăn quá no','ăn quá nhiều') and any_of('có ga') and any_of('rượu') and any_of('nhiệt độ') and any_of('cười','cảm xúc','phấn khích','lo âu') and any_of('không phải lúc nào','không bảo đảm','có thể','không có nghĩa là luôn'),
'hypothesis':any_of('thai nhi','bào thai','fetal','tiến hóa') and any_of('giả thuyết','chưa chứng minh','không phải mục đích đã biết'),
'low_risk':any_of('chờ','tự hết') and any_of('thở chậm','hít thở chậm') and any_of('nhấp nước','nhấp từng ngụm','uống từng ngụm') and any_of('nín thở','valsalva','đường') and any_of('bằng chứng hạn chế','bằng chứng cho hiệu quả nhất quán vẫn hạn chế','không chắc','không đồng đều','dữ liệu nghiên cứu còn ít'),
'avoid_harm':any_of('không dọa','đừng dọa','dọa cho giật mình','giật mình không phải cách an toàn','gây sợ hãi') and any_of('hóc','nghẹn','mắc nghẹn') and any_of('vật nguy hiểm','nuốt đồ vật','nuốt vật lạ') and any_of('quá nhiều nước','uống quá nhiều nước','uống nước quá mức','một lượng nước quá mức') and any_of('ngất','choáng','mất ý thức'),
'medication':any_of('chlorpromazine') and any_of('baclofen') and any_of('metoclopramide') and any_of('bác sĩ','clinician','chuyên môn') and any_of('tác dụng phụ','tác dụng không mong muốn') and any_of('không tự dùng','không tự uống','không tự điều trị','không nên tự mua','tự điều chỉnh liều','chỉ nên được dùng dưới hướng dẫn'),
'persistent':any_of('48 giờ','hai ngày') and any_of('kéo dài','persistent') and any_of('đánh giá','khám'),
'intractable':any_of('một tháng','1 tháng','intractable','khó trị') and any_of('định nghĩa','thường gọi','cách gọi'),
'safety':any_of('giấc ngủ','ăn uống','hô hấp','khó thở') and any_of('đau ngực') and any_of('đau bụng') and any_of('thần kinh','yếu','nói khó') and any_of('sốt') and any_of('nôn') and any_of('phẫu thuật','thuốc mới'),
'closing':any_of('tiếng nhỏ','âm thanh nhỏ','tiếng động nhỏ','tiếng động rất nhỏ','tiếng hic') and any_of('cơ hoành') and any_of('dây thần kinh','dây hoành','dây lang thang') and any_of('thân não') and any_of('thanh môn')
}
s={'clinical':ctx(('mayo clinic','cleveland clinic'),('48 giờ','kéo dài','persistent','cơ hoành','thanh môn')),'review':ctx(('william whitelaw','robert straus','straus','tổng quan y khoa','medical review'),('cung phản xạ','reflex arc','dây hoành','dây phế vị'))};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)
