"""
Thử CÁCH LY giữa các shop (tách lõi 24/09/2026): khách của shop này không bao
giờ thấy tri thức, danh mục, liên hệ hay luật ngành của shop khác.

Không cần CSDL, không gọi mạng: nhà cung cấp AI giả chỉ ghi lại prompt.
    python thu/thu_tach_shop.py
"""
import os
import sys

sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

import nao.tra_loi as tl  # noqa: E402
from giao_uoc import NguCanh  # noqa: E402
from llm.giao_dien import dung_prompt_dien_giai  # noqa: E402

SAI = []


def kiem(dk, ten):
    print(('  [OK]   ' if dk else '  [SAI]  ') + ten)
    if not dk:
        SAI.append(ten)


class _AIGia:
    ten = 'gia'
    token_vao_gan_nhat = token_ra_gan_nhat = 0
    model_da_gui_gan_nhat = model_thuc_te_gan_nhat = 'gia'

    def __init__(self):
        self.prompt = None
        self.ngu_canh = None

    def dien_giai(self, cau_hoi, cac_doan, ngu_canh):
        self.prompt = dung_prompt_dien_giai(cau_hoi, cac_doan, ngu_canh)
        self.ngu_canh = ngu_canh
        self.so_doan = len(cac_doan)
        return 'Dạ em trả lời thử ạ.\nNGUON_DA_DUNG: 0'


ai = _AIGia()
tl._lay_nha_cung_cap_dung_chung = lambda: ai
tl.khop = lambda *a, **k: None                  # không có CSDL: tầng 1 không khớp
tl._hang_doi_ghi_nhan = None
tl._nhat_ky_ghi = None
tl.con_ngan_sach = lambda: True

print('=== 1) Khách SPA hỏi giá — không được dính gì của TradingAuto ===')
kq = tl.tra_loi('giá dịch vụ chăm sóc da bao nhiêu vậy em', NguCanh(phien='thu-spa-1', khong_gian='spa'))
he, nd = ai.prompt
toan_bo = he + nd
kiem(ai.ngu_canh is not None and ai.ngu_canh.khong_gian == 'spa', 'đi qua mô hình với đúng khong_gian spa (không phải bảng giá khuôn mẫu)')
kiem('TradingAuto' not in toan_bo, 'prompt không có chữ "TradingAuto"')
kiem('MT4' not in toan_bo and 'MetaTrader' not in toan_bo and '4109' not in toan_bo, 'prompt không có thuật ngữ / bảng mã lỗi trading')
kiem('VipTrend' not in toan_bo and 'SMART DCA' not in toan_bo, 'không có danh mục sản phẩm TradingAuto')
kiem('/Pricing' not in toan_bo, 'không mời khách xem trang /Pricing của TradingAuto')
kiem('bác sĩ' in he, 'có điều cấm riêng ngành spa (không chẩn đoán, khuyên gặp bác sĩ)')
kiem(ai.so_doan == 0, 'bộ tìm kiếm của spa không trả đoạn tài liệu trading nào')
kiem('https://tradingauto.org' not in kq.tra_loi, 'đầu ra không bị gắn tên miền TradingAuto')

print('\n=== 2) Khách SPA chào — lời giới thiệu của spa ===')
kq = tl.tra_loi('chào em', NguCanh(phien='thu-spa-2', khong_gian='spa'))
kiem('spa' in kq.tra_loi and 'TradingAuto' not in kq.tra_loi, 'câu chào tự giới thiệu là trợ lý của spa')

print('\n=== 3) Khách SPA tả chuyện "code", "EMA" — luật ngành trading không chạy ===')
from nao.dinh_tuyen import phan_loai  # noqa: E402
from congcu.so_tay import cap_nhat  # noqa: E402
st = cap_nhat(None, 'em muốn code giảm giá cho gói massage, xem ema lịch', 'khac', nganh='spa')
kiem(st.get('chu_de') is None and not st.get('nen_tang'), 'sổ tay spa không ghi chủ đề "đặt code" / nền tảng MT')
nc = NguCanh(phien='x', khong_gian='spa')
kiem(phan_loai('key của tôi còn hạn không', nc)[0] != 'tra_key', 'spa không có nhánh tra key')

print('\n=== 4) TradingAuto giữ nguyên hành vi ===')
kq = tl.tra_loi('copytrade chạy được 2 sàn khác nhau không', NguCanh(phien='thu-ta-1'))
he, nd = ai.prompt
kiem('TradingAuto' in he and '4109' in he, 'prompt TradingAuto vẫn có vai + bảng mã lỗi')
kiem('bác sĩ' not in he, 'không lẫn điều cấm của spa')
kiem(phan_loai('key của tôi còn hạn không', NguCanh(phien='y'))[0] == 'tra_key', 'TradingAuto vẫn nhận câu tra key')

print('\nTHU_TACH_SHOP:', 'QUA HẾT.' if not SAI else f'SAI {len(SAI)} CA: {SAI}')
sys.exit(1 if SAI else 0)
