# -*- coding: utf-8 -*-
"""LIEN_KET.PY — đổi đường dẫn nội bộ "/toolintroduce/dcabot" thành link đầy đủ.

VÌ SAO
------
Chủ dự án 24/09/2026: "các câu trả lời về đường dẫn bị thiếu url ban đầu".
Kho tư vấn, chỉ mục web và mô hình đều viết đường dẫn TƯƠNG ĐỐI. Trên web
còn tạm hiểu được, nhưng trên Messenger "/toolintroduce/copytrade" chỉ là
chữ — khách không bấm được, cũng không biết của trang nào.

Đổi ở ĐẦU RA của lõi (nao/tra_loi.py) để mọi tầng, mọi kênh cùng được sửa;
nội dung gốc trong kho vẫn tương đối, đổi tên miền chỉ cần sửa một biến.

CHỈ đổi đường dẫn có đoạn đầu là trang THẬT của website (theo .htaccess),
để "chép vào thư mục /Experts" hay "MT4/MT5" không bị biến thành link.

Tên miền: biến môi trường CHATBOT_SITE_URL (mặc định https://tradingauto.org).
Nhân bản cho mô hình khác (spa) thì khai thêm CHATBOT_SITE_URL_<KHONG_GIAN>.

Tự kiểm:  python congcu/lien_ket.py
"""
from __future__ import annotations

import os
import re

GOC_MAC_DINH = 'https://tradingauto.org'

# Trang công khai của website (RewriteRule trong public/.htaccess + thư mục thật).
TRANG_GOC = frozenset('''
Pricing botvip codebot dashboard faq funds guilde livesignal login register pages product
products profile recharge sudung toolintroduce invoices orders
'''.split())

_MAU = re.compile(r'(?<![\w.:/\\])/([A-Za-z][A-Za-z0-9_\-]*)((?:/[A-Za-z0-9_\-.]*)*(?:#[\w\-]+)?)')


def goc_cho(khong_gian: str = 'tradingauto') -> str:
    """Tên miền của shop: biến môi trường (ghi đè khi cần) > hồ sơ shop > mặc định."""
    rieng = os.environ.get(f'CHATBOT_SITE_URL_{(khong_gian or "").upper()}')
    if rieng:
        return rieng.rstrip('/')
    try:
        import shop
        hs = shop.lay(khong_gian)
        if hs.ten_mien:
            return hs.ten_mien.rstrip('/')
        if hs.ma != shop.MAC_DINH:
            return ''                      # shop chưa có web: không đổi link
    except Exception:  # noqa: BLE001
        pass
    return (os.environ.get('CHATBOT_SITE_URL') or GOC_MAC_DINH).rstrip('/')


def trang_goc_cho(khong_gian: str = 'tradingauto') -> frozenset:
    try:
        import shop
        hs = shop.lay(khong_gian)
        # Shop khác không bao giờ mượn danh sách trang của TradingAuto.
        return hs.trang_goc if (hs.trang_goc or hs.ma != shop.MAC_DINH) else TRANG_GOC
    except Exception:  # noqa: BLE001
        return TRANG_GOC


def tuyet_doi_hoa(van_ban: str, goc: str = GOC_MAC_DINH, trang_goc: frozenset = TRANG_GOC) -> str:
    if not van_ban or '/' not in van_ban or not goc:
        return van_ban

    def _thay(m: 're.Match[str]') -> str:
        if m.group(1) not in trang_goc:
            return m.group(0)
        duong = m.group(0)
        # Dấu chấm cuối câu không thuộc đường dẫn: "/pages/mt5_stream."
        cuoi = ''
        while duong and duong[-1] in '.':
            duong, cuoi = duong[:-1], duong[-1] + cuoi
        return goc.rstrip('/') + duong + cuoi

    return _MAU.sub(_thay, van_ban)


if __name__ == '__main__':
    ca = [
        ('Chi tiết: /toolintroduce/copytrade. Anh', 'Chi tiết: https://tradingauto.org/toolintroduce/copytrade. Anh'),
        ('xem tại /pages/mt5_stream\n', 'xem tại https://tradingauto.org/pages/mt5_stream\n'),
        ('(/guilde/dcabot#config-modes)', '(https://tradingauto.org/guilde/dcabot#config-modes)'),
        ('bảng giá /Pricing', 'bảng giá https://tradingauto.org/Pricing'),
        ('[Hướng dẫn](/guilde/trendbot)', '[Hướng dẫn](https://tradingauto.org/guilde/trendbot)'),
        ('đã có https://tradingauto.org/toolintroduce/dcabot rồi', 'đã có https://tradingauto.org/toolintroduce/dcabot rồi'),
        ('chép vào thư mục /Experts nhé', 'chép vào thư mục /Experts nhé'),
        ('chạy MT4/MT5 24/7', 'chạy MT4/MT5 24/7'),
        ('link https://vigco.co/la-com/vi/autotradingorg123', 'link https://vigco.co/la-com/vi/autotradingorg123'),
        ('MQL5/Experts/copytrade.ex5', 'MQL5/Experts/copytrade.ex5'),
    ]
    for vao, mong in ca:
        ra = tuyet_doi_hoa(vao)
        assert ra == mong, (vao, ra)
        print('  OK', repr(ra))
    print('TỰ KIỂM congcu/lien_ket.py QUA.')
