# -*- coding: utf-8 -*-
"""KIEM_TU_VAN.PY — chạy các cuộc tư vấn nhiều lượt bằng MÔ HÌNH THẬT, in ra
để người đọc chấm. KHÔNG phải bộ test tự động (không assert chất lượng).

Dùng trên máy chủ, với đúng môi trường của chatbot.service:
    sudo bash -c 'set -a; . /etc/tradingauto-chatbot.env; set +a; \
                  ./moitruong/bin/python thu/kiem_tu_van.py'

Mọi phiên mang tiền tố 'thu-' — xoá sau khi chấm:
    DELETE FROM chat_phien WHERE phien LIKE 'thu-%';
"""
from __future__ import annotations

import logging
import os
import random
import sys
import threading
import time

_THU_MUC_CHA = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
if _THU_MUC_CHA not in sys.path:
    sys.path.insert(0, _THU_MUC_CHA)
os.chdir(_THU_MUC_CHA)
logging.basicConfig(level=logging.WARNING)

from giao_uoc import NguCanh  # noqa: E402
from nao.tra_loi import tra_loi  # noqa: E402
from congcu.phien import tai_phien  # noqa: E402

CUOC = {
    'A_nhieu_luot_copytrade': [
        'cài copytrade thế nào',
        'em dùng mt4 sàn exness, 2 tài khoản cùng sàn',
        'chép file xong rồi, bật dll ở đâu',
        'giờ bị lỗi 4109',
        'master đóng lệnh một phần thì slave có đóng theo không',
        'nếu sau này master chuyển qua mt5 thì slave mt4 có nhận được không',
    ],
    'B_mo_ho': ['bot của em không chạy'],
    'C_nhieu_van_de': ['cho em hỏi dca bot giá sao, cài thế nào, chạy vps được không, với lại có copy sang tài khoản khác được không'],
    'D_thuong_thuc': ['nên thuê vps ở đâu để chạy bot, ping bao nhiêu là ổn', 'lỗi 130 invalid stops là gì'],
    'E_rieng_san_pham': ['dcabot có tham số trailing stop không, đặt thế nào'],
}


def _cho_tom_gon():
    for _ in range(120):
        if not any(t.name.startswith('compact-') for t in threading.enumerate()):
            return
        time.sleep(0.5)


def main():
    goc = f'thu-{random.randint(1000, 9999)}'
    chon = set(sys.argv[1:])  # vd: python thu/kiem_tu_van.py C D — chỉ chạy các cuộc đó
    for ten, cac_cau in CUOC.items():
        if chon and ten[:1] not in chon:
            continue
        phien = f'{goc}-{ten[:1]}'
        print('\n' + '#' * 78 + f'\n# {ten}   (phien={phien})\n' + '#' * 78)
        for i, cau in enumerate(cac_cau, 1):
            nc = NguCanh(phien=phien, ngon_ngu='vi', nguoi_dung='khach', may=f'mthu{goc}')
            t0 = time.time()
            kq = tra_loi(cau, nc)
            print(f'\n[{i}] KHÁCH: {cau}')
            print(f'    (tầng {kq.tang} · {time.time() - t0:.1f}s · token ra {kq.token_ra} · '
                  f'nguồn {[n["duong_dan"] for n in kq.nguon]})')
            print('    BOT: ' + kq.tra_loi.replace('\n', '\n         '))
            _cho_tom_gon()
        p = tai_phien(phien)
        if p and p.get('compact'):
            print(f'\n  --- BẢN TÓM GỌN (tới lượt {p["compact_den_luot"]}) ---')
            print('  ' + p['compact'].replace('\n', '\n  '))


if __name__ == '__main__':
    main()
