#!/usr/bin/env python3
from pathlib import Path
import json,re
root=Path(__file__).resolve().parents[1];low=(root/'script/script_borborygmi.txt').read_text().lower()
def a(*xs):return any(x in low for x in xs)
def ctx(ns,cs,r=900):
 ps=[i for n in ns for i in range(len(low)) if low.startswith(n,i)]
 return any(any(c in low[max(0,p-r):p+r] for c in cs) for p in ps)
g={
'borborygmi':a('borborygmi','tiếng réo','tiếng bụng') and a('khí') and a('dịch') and a('thành ruột','ống tiêu hóa') and a('không phải dạ dày đang nói','không phải tiếng dạ dày nói','không phải dạ dày biết nói','dạ dày lên tiếng” chỉ là cách nói'),
'fed_fasting':a('sau khi ăn','đã ăn','no') and a('nhịn đói','giữa các bữa','lúc đói'),
'mmc':a('migrating motor complex','phức hợp vận động di chuyển','mmc') and a('dạ dày') and a('ruột non') and a('chu kỳ','theo đợt') and a('co bóp mạnh','co thắt mạnh','lan truyền'),
'meal_switch':a('bữa ăn','ăn vào') and a('ngắt','dừng','chuyển') and a('kiểu vận động','mô hình vận động','nhu động'),
'motilin':a('motilin') and a('liên quan','đi cùng','tương quan') and a('không phải hormone đói duy nhất','không phải “hormone đói” duy nhất','không phải nguyên nhân duy nhất','không phải nguyên nhân độc lập','không giải thích toàn bộ','không phải nút bấm duy nhất'),
'ghrelin':a('ghrelin') and a('cảm giác đói','cơn đói') and a('khác','không đồng nhất','phân biệt'),
'no_detox':a('không dọn độc tố','không làm sạch độc tố','không thải độc','không quét “độc tố”','không quét độc tố') and a('không tự tiêu hóa','không ăn chính dạ dày','không tiêu hóa chính nó','không tự ăn'),
'loudness':a('ít thức ăn','không có thức ăn','trống hơn') and a('giảm âm','đệm âm','hãm âm','làm vật liệu đệm','làm dịu âm') and a('túi khí','bọt khí','khí và dịch','khí–lỏng') and a('yên tĩnh','chú ý') and a('không đo mức đói','không đo cơn đói','không phải thước đo cơn đói','không đo calo','không đếm calo'),
'differential':a('nuốt không khí','khí bị nuốt') and all(a(x) for x in ['nước có ga','ăn nhanh','lactose','fodmap','tiêu chảy','nhiễm trùng','ibs']) and a('không chẩn đoán','không thể chẩn đoán'),
'practical':a('ăn đều','bữa đều','ăn đúng giờ','lịch tương đối đều','ăn theo lịch') and a('ăn chậm') and a('uống đủ nước','bù nước','giữ đủ nước') and a('vận động nhẹ','đi bộ nhẹ') and a('tác nhân riêng','tác nhân cá nhân','món kích hoạt','theo dõi món','nhật ký món ăn'),
'unsafe':a('bữa ăn khổng lồ','bữa khổng lồ','ăn thật nhiều','ăn quá nhiều','nhồi ăn') and a('nhịn đói cực đoan','nhịn ăn cực đoan','nhịn cực đoan') and a('uống quá nhiều nước','uống thật nhiều thật nhanh','nước quá mức') and a('detox','thải độc'),
'emergency':a('đau bụng dữ dội','đau dữ dội','đau tăng dần') and a('bụng cứng','bụng trướng','bụng sưng') and a('nôn kéo dài','nôn liên tục','nôn dai dẳng') and a('không trung tiện','không xì hơi','không thể trung tiện') and a('không đi ngoài','không đại tiện','không thể đi ngoài') and a('máu trong phân','máu đỏ trong phân','phân đen') and a('sốt') and a('ngất') and a('mất nước'),
'persistent':a('sụt cân','giảm cân','sụt cân không chủ ý') and a('ban đêm','đánh thức','thức giấc ban đêm') and a('tiêu chảy mạn','tiêu chảy kéo dài','tiêu chảy hoặc táo bón mạn') and a('táo bón mạn','táo bón kéo dài','tiêu chảy hoặc táo bón mạn') and a('đánh giá','khám'),
'not_self_test':a('âm cao','cao vút') and a('tắc ruột') and a('không thể tự','không tự chẩn đoán','không loại trừ') and a('im lặng','không nghe thấy','vắng tiếng'),
'closing':a('đói') and a('đặt sân khấu','tạo bối cảnh','góp phần') and a('khí') and a('dịch') and a('chương trình vận động','mô hình vận động','motor')
}
s={'CodeMarlett':ctx(('code','marlett','1975'),('interdigestive','giữa các bữa','phức hợp','chu kỳ')),'HumanMMC':ctx(('vantrappen','janssens'),('motilin','mmc','người','chu kỳ')),'Physiology':a('sinh lý tiêu hóa','giáo trình sinh lý','tổng quan sinh lý','review') and a('borborygmi','tiếng ruột','khí và dịch')};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)
