#!/usr/bin/env python3
from pathlib import Path
import json,re
root=Path(__file__).resolve().parents[1];text=(root/'script/script_motion_sickness.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={
'mismatch':any_of('xung đột cảm giác','xung đột giác quan','sensory conflict','không khớp') and any_of('mắt','thị giác') and any_of('tiền đình','tai trong') and any_of('cảm giác bản thể','proprioception','cơ và khớp'),
'canals':any_of('ống bán khuyên','semicircular') and any_of('xoay','quay đầu','gia tốc góc'),
'otoliths':any_of('sỏi tai','otolith','soan nang','cầu nang') and any_of('gia tốc thẳng','trọng lực','nghiêng'),
'neural_mismatch':any_of('mô hình nội tại','dự đoán','bản sao') and any_of('sai lệch','không khớp','mismatch'),
'postural':any_of('bất ổn tư thế','postural instability','kiểm soát tư thế') and any_of('bổ sung','cạnh tranh','không phải lời giải duy nhất','chưa thống nhất'),
'autonomic':any_of('buồn nôn') and any_of('mồ hôi lạnh','toát mồ hôi','đổ mồ hôi','rịn mồ hôi') and any_of('tái mặt','nhợt mặt'),
'driver_caveat':any_of('người lái') and any_of('dự đoán','chủ động','kiểm soát') and any_of('không phải lúc nào','không tuyệt đối','không phải ai'),
'reading_horizon':any_of('đọc điện thoại','nhìn màn hình','đọc sách') and any_of('đường chân trời','điểm tham chiếu ổn định','nhìn xa'),
'practical':any_of('giữ đầu','tựa đầu') and any_of('thông gió','không khí mát','không khí thoáng','mở cửa') and any_of('ghế trước','gần cánh','giữa tàu','gần giữa tàu','midship') and any_of('làm quen dần','thích nghi dần','quen dần','habituation'),
'toxin_caveat':any_of('treisman','độc tố','ngộ độc') and any_of('giả thuyết','tranh luận','chưa được chứng minh','không phải kết luận'),
'medication':any_of('kháng histamine','scopolamine','thuốc chống say') and any_of('buồn ngủ','tác dụng phụ') and any_of('không lái xe','đừng lái xe') and any_of('nhãn thuốc','bác sĩ','dược sĩ'),
'not_self_test':any_of('không phải bài kiểm tra','không dùng để tự kiểm tra','không tự chẩn đoán','không nên dùng một chuyến xe như phép tự kiểm tra','không phải bài tự kiểm tra') and any_of('tai trong','tiền đình'),
'safety':any_of('chóng mặt dữ dội','chóng mặt mới','chóng mặt hoặc buồn nôn mới xuất hiện','chóng mặt hoặc buồn nôn mới xuất hiện, rất nặng') and any_of('ngất','đau ngực') and any_of('đau đầu dữ dội') and any_of('yếu','nói khó','thị lực') and any_of('nôn kéo dài','nôn liên tục','mất nước') and any_of('không có chuyển động','không đi xe','ngay cả khi không có chuyển động','cả khi không chuyển động') and any_of('đánh giá chuyên môn','đánh giá y tế','đánh giá phù hợp','cấp cứu'),
'closing':any_of('ngồi yên') and any_of('bản đồ chuyển động','những bản đồ','nhiều bản đồ')
}
s={'Reason/Brand':ctx(('j. t. reason','reason và brand','j. j. brand'),('sensory rearrangement','xung đột cảm giác','không khớp')),'Oman':ctx(('charles oman','oman'),('mô hình toán','mathematical','xung đột cảm giác','dự đoán')),'Operational':ctx(('alan benson','robert kennedy','kennedy'),('hàng không','tàu vũ trụ','mô phỏng','operational','quân sự'))}
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)
