# Key Sync Service - Configuration
# Cấu hình Redis và API
import os

# ===================== REDIS =====================
REDIS_HOST = "redis.tradingauto.org"
REDIS_PORT = 51200
# 26/09/2026: mật khẩu KHÔNG ghi trong mã (đã xoá khỏi lịch sử git). Đặt biến môi trường
# REDIS_PASSWORD cho service (EnvironmentFile của systemd). Bản đang chạy ở
# /opt/tradingauto-services trên máy web vẫn giữ config cũ của nó — deploy bản này thì
# phải thêm biến môi trường trước, nếu không keysync không vào được Redis.
REDIS_PASSWORD = os.environ.get("REDIS_PASSWORD", "")
REDIS_RECONNECT_DELAY = 5  # giây
REDIS_MAX_CONNECTIONS = 10
REDIS_SOCKET_TIMEOUT = 5
REDIS_SOCKET_CONNECT_TIMEOUT = 5

# ===================== SYNC =====================
UPDATE_INTERVAL = 120  # giây
FORCE_SYNC_INTERVAL = 10  # Force sync mỗi N lần chạy

# ===================== LOG =====================
# Trên VPS dịch vụ chạy dưới ProtectSystem=strict, chỉ ghi được vào
# /var/log/tradingauto. Trên máy local thì ghi cạnh mã nguồn.
LOG_FILE = "key_sync.log"

# ===================== WEBSITE =====================
# Sửa 16/09/2026: gốc của mọi lời gọi API. Đổi một chỗ là đổi cả dịch vụ.
API_BASE = "https://tradingauto.org"

# ===================== MÁY CHỦ KEY =====================
# Ranh giới: website nói sản phẩm này dùng MÁY CHỦ KEY NÀO (`backend`);
# còn máy chủ đó nằm ở Redis db mấy, hash tên gì thì key_sync biết.
#
# Thêm sản phẩm dùng lại một backend có sẵn thì KHÔNG phải sửa file này —
# chỉ cần khai `license_backend` ở trang quản trị sản phẩm. Chỉ khi có
# backend hoàn toàn mới mới thêm một dòng vào đây.
BACKENDS = {
    # Bảng này đối chiếu từ chính mã nguồn máy chủ key (16/09/2026):
    #   config.ini  [redis_tradingview] dbtradingview = 5
    #   config.ini  [redis_autotrade]   dbcopytrade   = 3
    #   config.ini  [redis_signal]      dbsignal      = 4
    #   manage_pxlicense.py   HASH_LIC = 'PXlicense'    -> redis_signal
    #   manage_telelicense.py HASH_LIC = 'telelicense'  -> redis_signal
    #   migrate_dca_control.py  'DCAlicense', REDIS_DB = 4
    #
    # Ba sản phẩm mới đều nằm chung db 4, phân biệt bằng TÊN HASH.
    "keytdv":      {"db": 5, "key_hash": "keytdv"},
    "keymaster":   {"db": 3, "key_hash": "keymaster"},
    "DCAlicense":  {"db": 4, "key_hash": "DCAlicense"},
    "PXlicense":   {"db": 4, "key_hash": "PXlicense"},
    "px":          {"db": 4, "key_hash": "PXlicense"},
    "telelicense": {"db": 4, "key_hash": "telelicense"},
    "tele:st":     {"db": 4, "key_hash": "telelicense"},
    # lic_hash() trong manage_telelicense.py: 'st' và rỗng -> `telelicense`,
    # sản phẩm khác -> `telelicense:<sp>`. Nên sb KHÔNG dùng chung hash với
    # st; để chung là hai bên ghi đè nhau.
    "tele:sb":     {"db": 4, "key_hash": "telelicense:sb"},

    # MT5 Manager — thêm 21/09/2026. Đối chiếu từ routes/mt5manager.py:
    #   HASH_LIC = 'MT5Mlicense'  và  get_sig_redis_client() -> redis_signal (db 4)
    "mt5m":        {"db": 4, "key_hash": "MT5Mlicense"},

    # Backend không có trong bảng này sẽ bị BỎ QUA kèm cảnh báo trong
    # log, chứ không ghi bừa vào một db sai.
}

# ===================== DỰ PHÒNG =====================
# Dùng khi gọi /api/products thất bại (website sập, mạng đứt). Giữ đúng
# hai sản phẩm đang chạy để dịch vụ không mù hẳn.
#
# Danh sách này KHÔNG phải nguồn sự thật nữa — nguồn là /api/products.
TOOLS_FALLBACK = {
    "a280bec922d5d90ef78e3972c50a3e7d": {
        "title": "TradingView -> MT5",
        "backend": "keytdv",
        "fields": ["expired", "username"],
    },
    "17a6e6145d26b184ad205b6b3eecc478": {
        "title": "CopyTrade Online",
        "backend": "keymaster",
        "fields": ["expired", "username", "master_code", "number"],
    },
}
