#!/usr/bin/env python3
# 生成 V2RayNG 可用的 Trojan 多设备链接
# 用途：为多个设备生成独立的 trojan:// 链接

import qrcode
import json
import sys

# 默认配置
DEFAULT_DOMAIN = "hot13399.com"
DEFAULT_PORT = 443

# 预定义设备列表（可自定义）
DEFAULT_DEVICES = [
    {"name": "Android-1", "password": "F2vhwxP1Vvtc4r+NeIsHFx/s+B7sMGcj/o8OQteFJkY="},
    {"name": "Android-2", "password": "M3k9zXpQ4vR7nN8sW2jY6tH0dL5fG3pK="},
    {"name": "iOS", "password": "aB4cD6eF8gH2iJ5kL7mN9oP0qR1sT3uV="},
    {"name": "Windows", "password": "xY1zA3cB5dE7fG9hI2jK4lM6nO8pQ0rS="}
]

def generate_trojan_uri(device, domain, port):
    """生成 trojan:// URI"""
    password = device['password']
    # URL 编码
    password_encoded = password.replace('+', '%2B').replace('/', '%2F').replace('=', '%3D')
    
    # 构建 URI
    trojan_uri = f"trojan://{password_encoded}@{domain}:{port}?sni={domain}&allowInsecure=0&peer={domain}&type=tcp#Trojan-{device['name']}"
    return trojan_uri

def generate_qr_code(trojan_uri, output_path):
    """生成 QR 码"""
    qr = qrcode.QRCode(
        version=1,
        error_correction=qrcode.constants.ERROR_CORRECT_L,
        box_size=10,
        border=4,
    )
    qr.add_data(trojan_uri)
    qr.make(fit=True)
    img = qr.make_image(fill_color="black", back_color="white")
    img.save(output_path)
    return output_path

def main():
    domain = sys.argv[1] if len(sys.argv) > 1 else DEFAULT_DOMAIN
    port = int(sys.argv[2]) if len(sys.argv) > 2 else DEFAULT_PORT
    
    print("=== V2RayNG Trojan 链接生成器 ===")
    print(f"域名: {domain}")
    print(f"端口: {port}")
    print()
    
    # 为每个设备生成链接和 QR 码
    links = []
    for device in DEFAULT_DEVICES:
        trojan_uri = generate_trojan_uri(device, domain, port)
        device['trojan_link'] = trojan_uri
        
        # 生成 QR 码
        qr_path = f"/tmp/trojan-{device['name'].lower()}-qr.png"
        try:
            generate_qr_code(trojan_uri, qr_path)
            print(f"📱 {device['name']}")
            print(f"   密码: {device['password']}")
            print(f"   链接: {trojan_uri}")
            print(f"   QR 码: {qr_path}")
            print()
        except Exception as e:
            print(f"   ⚠️  QR 码生成失败: {e}")
        
        links.append(device)
    
    # 保存到 JSON 文件
    output_file = "/tmp/multi-device-trojan-links.json"
    with open(output_file, 'w') as f:
        json.dump(links, f, indent=4, ensure_ascii=False)
    
    print(f"✅ 配置已保存到: {output_file}")
    print()
    print("=== 导入方法 ===")
    print("1. 打开 V2RayNG 应用")
    print("2. 点击 '+' 或 '添加配置'")
    print("3. 选择 '从剪贴板导入' 或 '扫描 QR 码'")
    print("4. 选择生成的节点")
    print("5. 点击连接开关")
    print()
    print("=== Clash 配置示例 ===")
    print("```yaml")
    print("proxies:")
    for device in links:
        print(f"  - name: \"Trojan-{device['name']}\"")
        print(f"    type: trojan")
        print(f"    server: {domain}")
        print(f"    port: {port}")
        print(f"    password: {device['password']}")
        print(f"    udp: true")
        print(f"    sni: {domain}")
        print(f"    skip-cert-verify: false")
        print(f"")
    print("```")
    print()
    print("✅ 配置完成！")

if __name__ == "__main__":
    main()
